1

我在 Umbraco 中创建了一个自定义 WCF 服务。该服务驻留在Service文件夹中,似乎工作正常(我可以调用它,它会适当地响应)。现在我希望用户在调用服务时进行身份验证。

为此,我已将这些行添加到web.config

<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
 <bindings>
  <webHttpBinding>
    <binding name="RaceManBinding">
      <security mode="None" />
    </binding>
  </webHttpBinding>
</bindings>
<services>
  <service name="RaceManagerAdmin.RaceManDataService" behaviorConfiguration="RaceManBehavior">

    <endpoint address=""
              binding="webHttpBinding"
              contract="System.Data.Services.IRequestHandler" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="RaceManBehavior">
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
                                membershipProviderName="UmbracoMembershipProvider" />
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

当我的服务被调用时,它应该使用 Umbraco 会员提供者来验证用户。

我的客户通过创建一个网络凭证对象来指定这一点,如下所示:

var a = new RaceEntities(new Uri("http://localhost:40406/umbraco/Webservices/RaceManDataService.svc")) { Credentials = new NetworkCredential("admin", "secret") };

当我检查时,HTTPContext.Current我没有看到任何经过身份验证的用户。

我究竟做错了什么?

弗雷德里克

4

1 回答 1

1

您需要启用 ASP.Net 兼容性才能通过 HttpContext 访问身份:

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

这个问题的答案提到了另一种方法:How to access HttpContext.Current.User.Username in WCF service

于 2013-02-10T14:44:53.027 回答