使用WCF的自定义ASP.NET表单身份验证服务
我正在尝试使用WCF创建自定义ASP.NET表单身份验证服务。我通过一个只包含一行JS的测试页面调用它(ScriptManager脚本除外)。问题是服务器返回响应代码500,而响应正文为空。未命中Global.asax中服务方法和应用程序_错误中的断点使用WCF的自定义ASP.NET表单身份验证服务,wcf,asp.net-authentication,Wcf,Asp.net Authentication,我正在尝试使用WCF创建自定义ASP.NET表单身份验证服务。我通过一个只包含一行JS的测试页面调用它(ScriptManager脚本除外)。问题是服务器返回响应代码500,而响应正文为空。未命中Global.asax中服务方法和应用程序_错误中的断点 Sys.Services.AuthenticationService.login('user', 'pass', false, null, null, null, null, null); 我可以在浏览器工具中看到请求转到服务器,请求正文如下:
Sys.Services.AuthenticationService.login('user', 'pass', false, null, null, null, null, null);
我可以在浏览器工具中看到请求转到服务器,请求正文如下:
{"userName":"user","password":"pass","createPersistentCookie":false}
请求方的其他事情似乎也不错
以下是配置服务:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="BtxAuthenticationEndpointBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyNamespace.BtxAuthenticationService">
<endpoint contract="MyNamespace.IBtxAuthenticationService" binding="webHttpBinding" behaviorConfiguration="BtxAuthenticationEndpointBehavior"/>
</service>
</services>
</system.serviceModel>
实施:
public class BtxAuthenticationService : IBtxAuthenticationService
{
public bool Login(string username, string password, bool createPersistentCookie)
{
... irrelevant because this is never hit
}
public void Logout()
{
}
}
有人能告诉我如何配置它,或者告诉我调试它的方法吗。一篇关于使用WCF服务实现自定义表单身份验证的文章也将受到欢迎。我尝试过各种其他设置,包括我能找到的所有异常详细信息设置,但没有取得任何进展(尽管我能够进行一些回归并获得不同的异常,如缺少端点等)
谢谢您的时间。不确定这是否有帮助。我从未编写过这样的服务,但您的配置创建了WCF服务,该服务不支持ASP.NET AJAX,并且使用XML而不是JSON。尝试使用此行为而不是webHttp行为:
<endpointBehaviors>
<behavior name="BtxAuthenticationEndpointBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
不确定这是否有帮助。我从未编写过这样的服务,但您的配置创建了WCF服务,该服务不支持ASP.NET AJAX,并且使用XML而不是JSON。尝试使用此行为而不是webHttp行为:
<endpointBehaviors>
<behavior name="BtxAuthenticationEndpointBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
我已经试过了。明天当我到达我的工作机器时,我会再试一次,但我相信enableWebScript负责提供JS代理,在这种情况下不需要它。我可能在这个问题上是错的,但即使这是一个问题,我应该能够看到更多的描述性错误。是的,你是对的。EnableWebScript允许添加服务作为对ScriptManager的引用,并提供JS代理。但它也将消息格式转换为JSON。您还可以在WebInvoke属性中通过设置请求和响应格式来实现这一点。同时尝试打开AspNetCompatibility level。我尝试通过webHttp元素设置格式(它有一个属性),但没有帮助。您可以尝试打开WCF跟踪并检查内部WCF错误:您是对的。仅添加enableWebScript修复了该问题。我曾多次尝试添加webHttp和enableWebScript,但都不起作用。我应该停止猜测WCF配置选项的作用,去读一些关于它的东西。我确信我只尝试了enableWebScript,但我再次尝试,只是为了确保它能正常工作。非常感谢,我已经试过了。明天当我到达我的工作机器时,我会再试一次,但我相信enableWebScript负责提供JS代理,在这种情况下不需要它。我可能在这个问题上是错的,但即使这是一个问题,我应该能够看到更多的描述性错误。是的,你是对的。EnableWebScript允许添加服务作为对ScriptManager的引用,并提供JS代理。但它也将消息格式转换为JSON。您还可以在WebInvoke属性中通过设置请求和响应格式来实现这一点。同时尝试打开AspNetCompatibility level。我尝试通过webHttp元素设置格式(它有一个属性),但没有帮助。您可以尝试打开WCF跟踪并检查内部WCF错误:您是对的。仅添加enableWebScript修复了该问题。我曾多次尝试添加webHttp和enableWebScript,但都不起作用。我应该停止猜测WCF配置选项的作用,去读一些关于它的东西。我确信我只尝试了enableWebScript,但我再次尝试,只是为了确保它能正常工作。非常感谢你。