WCF中的ASP.Net成员资格提供程序(WebHttpBinding)

4
我正在开发一个需要身份验证的WPF应用程序。我想使用客户端应用程序服务来使用ASP.Net成员资格提供程序(如果您不知道我在说什么,请参见此link)。实际上,我基于MembershipProvider制作了自己的提供程序。它与ASP.Net项目完美配合。
但现在,我不想再将我的身份验证托管在ASP.Net项目中,而是要放在WCF中。
因此,我创建了一个WCF服务并使用了WebHttpBinding。一切都很好,直到输入登录信息。调用已经被发送到服务端,没有疑问,但是没有任何反应。实际上,就像调用已经被执行但未得到响应。
我可以确认这一点,因为我使用了服务跟踪查看器来记录所有消息到服务端。
最终,我收到了超时消息:

传入的HTTP请求URI 'http://localhost:21200/Authentication_JSON_AppService.axd/Login' 与任何服务操作不匹配。



就像提供者没有接听或接收呼叫一样。我真的不知道该看哪里。我已经做了研究,但没有找到类似的示例。这是我的设置:

1. 成员资格提供程序的配置文件(在ASP.NET项目中工作)

<system.web.extensions>
<scripting>
  <webServices>
    <authenticationService enabled="true" />
    <roleService enabled="true" />
  </webServices>
</scripting>
</system.web.extensions>
<system.web>
  <authentication mode="Forms" />
  <authorization>
    <allow users="*"/>
  </authorization>
  <membership defaultProvider="FooMembershipProvider">
    <providers>
      <add name="FooMembershipProvider" type="Foo.Web.Security.FooMembershipProvider, Foo.Web" />
    </providers>
  </membership>
</system.web>



2. 我的应用程序配置文件,服务部分(仅在使用ASP.NET项目时起作用)

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

  <behaviors>
    <endpointBehaviors>
      <behavior name="WebBehavior">
        <webHttp />
        <enableWebScript />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="WebBehavior">
        <serviceMetadata httpGetEnabled="true" httpGetUrl="" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>


  <bindings>
    <basicHttpBinding>
      <binding name="basicHttpMode">
        <security mode="None" />
      </binding>
    </basicHttpBinding>
    <webHttpBinding>
      <binding name="webHttpMode">
        <security mode="None" />
      </binding>
    </webHttpBinding>
  </bindings>

  <services>
    <service behaviorConfiguration="WebBehavior"
           name="Foo.Security.Business.Manager.Wcf.Host.SecurityManager">

      <endpoint address=""
              binding="webHttpBinding"
              contract="Foo.Security.Business.Contract.ISecurityContract"
              behaviorConfiguration="WebBehavior"
              bindingConfiguration="webHttpMode" />
      <host>
        <baseAddresses>
          <add baseAddress="http://localhost:21200" />
        </baseAddresses>
      </host>
    </service>
  </services>
</system.serviceModel>  


3. 我的应用程序配置文件,服务调用部分(仅在使用ASP.NET项目时有效)

<membership defaultProvider="ClientAuthenticationMembershipProvider">
   <providers>
     <add name="ClientAuthenticationMembershipProvider"  type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
         serviceUri="http://localhost:21200/Authentication_JSON_AppService.axd"
         credentialsProvider="Foo.Windows.LoginWindow, Foo.Windows" />

     <add name="FooMembershipProvider"
         type="Foo.Security.Business.Provider.FooMembershipProvider, Foo.Security.Business"
         serviceUri="http://localhost:21200/Authentication_JSON_AppService.axd"
         credentialsProvider="Foo.Windows.LoginWindow, Foo.Windows" />
   </providers>
 </membership>
 <roleManager defaultProvider="ClientRoleProvider" enabled="true">
   <providers>
     <add name="ClientRoleProvider"
         type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
         serviceUri="http://localhost:21200/Role_JSON_AppService.axd"
         cacheTimeout="86400" />
   </providers>
 </roleManager>  

如果有人能给我一些提示在哪里查找,我将不胜感激。谢谢。
2个回答

0

谢谢你的帮助,但是它没有起作用。 无论如何,我们改变了我们的身份验证方法。 - esylvestre

0

你可以尝试的一件事,是使用 HTTPS。

在这种情况下,您正在以明文形式通过网络发送密码。有时技术会拯救您,如果您尝试使用它,它将无法正常工作。

我不确定这是否适用于此情况,但由于只有登录无法正常工作,因此值得尝试。


好的,谢谢,我会尝试一下。 如果它能够工作的话,那将让我感到惊讶,因为在经典的ASP.Net项目中它不需要。 - esylvestre
好的,我尝试使用wsHttpBinding,但我需要一个我没有拥有的证书。 还有其他想法吗? - esylvestre
wshttpbinding和https并不相同。您可以使用IIS工具创建自签名证书。 - Shiraz Bhaiji
@ShirazBhaiji,您能否回答一下这个问题:http://stackoverflow.com/questions/9584198/authentication-service-using-wcf? - LCJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接