1

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

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>

以及接口的声明:

[ServiceContract]
public interface IBtxAuthenticationService
{
    [OperationContract]
    [WebInvoke]
    bool Login(string username, string password, bool createPersistentCookie);

    [OperationContract]
    [WebInvoke]
    void Logout();
}

实施:

public class BtxAuthenticationService : IBtxAuthenticationService
{
    public bool Login(string username, string password, bool createPersistentCookie)
    {
        ... irrelevant because this is never hit
    }

    public void Logout()
    {
    }
}

有人可以告诉我如何配置它或指出我调试它的方法。一篇关于使用 WCF 服务实现自定义表单身份验证的文章也将受到欢迎。我尝试了各种其他设置,包括我能找到但无法取得任何进展的所有异常详细信息设置(尽管我能够进行一些回归并获得不同的异常,例如缺少端点等)。

感谢您的时间。

4

1 回答 1

1

不确定这是否有帮助。我从来没有写过这样的服务,但是你的配置创建了 WCF 服务,它不是 ASP.NET AJAX 准备好的,并且可以使用 XML 而不是 JSON。尝试使用它而不是 webHttp 行为:

<endpointBehaviors> 
  <behavior name="BtxAuthenticationEndpointBehavior"> 
    <enableWebScript /> 
  </behavior> 
</endpointBehaviors>  
于 2010-10-04T16:43:52.580 回答