使用WCF的自定义ASP.NET表单身份验证服务

使用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); 我可以在浏览器工具中看到请求转到服务器,请求正文如下:

我正在尝试使用WCF创建自定义ASP.NET表单身份验证服务。我通过一个只包含一行JS的测试页面调用它(ScriptManager脚本除外)。问题是服务器返回响应代码500,而响应正文为空。未命中Global.asax中服务方法和应用程序_错误中的断点

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,但我再次尝试,只是为了确保它能正常工作。非常感谢你。