【问题标题】:ASP.Net Membership provider in WCF (WebHttpBinding)WCF (WebHttpBinding) 中的 ASP.Net 成员资格提供程序
【发布时间】:2010-12-14 00:44:48
【问题描述】:

我正在开发一个需要身份验证的 WPF 应用程序。我想使用 客户端应用程序服务 来使用 ASP.Net Membership Provider(如果您不知道我在说什么,请参阅此link)。实际上,我基于 MembershipProvider 创建了自己的提供者。它与 ASP.Net 项目完美配合。

但是现在,我不希望我的身份验证托管在 ASP.Net 项目中,而是托管在 WCF 中。

所以,我做了一个 WCF 服务 并使用了 WebHttpBinding。一切正常,直到输入登录名。毫无疑问,对服务进行了调用,但没有任何反应。事实上,这就像调用已发出但未服务。 我可以确认它,因为我使用服务跟踪查看器将所有消息记录到服务中。

最终,我收到一条超时消息:

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



这就像提供者没有接听电话或接听电话一样。我真的不知道在哪里看。我已经完成了我的研究,但我没有找到类似的例子。这是我的设置:

1. Membership Provider 的配置文件(在 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>  


如果有人能给我一些提示,我将不胜感激。谢谢。

【问题讨论】:

    标签: wcf web-services asp.net-membership wcf-binding


    【解决方案1】:

    您可以尝试的一件事是使用 https。

    在这种情况下,您通过网络以明文形式发送密码。有时技术会拯救你,因为如果你尝试它就不会起作用。

    我不确定这里是否是这种情况,但是由于只是登录不起作用,因此值得一试。

    【讨论】:

    • 好的,谢谢,我试试。如果它可以正常工作,我会感到惊讶,因为对于经典的 ASP.Net 项目,它不需要它。
    • 好的,我尝试使用 wsHttpBinding 并且我需要一个我不拥有的证书。还有其他想法吗?
    • wshttpbinding 与 https 不同。您可以使用 IIS 工具创建自颁发的证书
    • @ShirazBhaiji 你能回答stackoverflow.com/questions/9584198/…吗?
    【解决方案2】:

    【讨论】:

    • 感谢您的帮助,但没有奏效。无论如何,我们改变了对身份验证方法的看法。
    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多