【问题标题】:Error calling WCF webservice through channelfactory - not permissioned通过 channelfactory 调用 WCF Web 服务时出错 - 未经许可
【发布时间】:2016-09-07 15:37:16
【问题描述】:

我正在使用 ChannelFactory 调用 WCF 服务(因为目标服务位置会根据环境而变化,我需要可配置 URL)。但是我得到了错误:

HTTP 请求未经客户端身份验证方案授权 '匿名的'。从服务器收到的身份验证标头是 '协商,NTLM'。

我的电话号码

var myBinding = new BasicHttpBinding();
var myEndpoint = new EndpointAddress(webserviceAddress);
var myChannelFactory = new ChannelFactory<IObjectService>(myBinding, myEndpoint);
var serviceClient = myChannelFactory.CreateChannel();

我的 WCF 服务 web.config system.servicemodel 部分

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0" />
  </system.serviceModel>

服务应基于 Windows 身份验证进行身份验证。我会认为默认情况下,上面的调用代码会使用 Windows 身份验证来传递代码作为(服务帐户)运行的帐户,但它似乎正在发送匿名

【问题讨论】:

  • 您的服务是否托管在 IIS 中?是否禁用匿名身份验证?

标签: c# wcf authentication


【解决方案1】:

您必须将模式设置为使用消息凭据进行传输,如以下代码所示:

var myBinding = new BasicHttpBinding();
myBinding.Security.Mode = SecurityMode.TransportCredentialOnly;

作为替代方案,您可以在绑定的构造函数中设置模式:

var myBinding = new BasicHttpBinding(SecurityMode.TransportCredentialOnly);

同时设置 ClientCredential:

myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;

【讨论】:

  • 谢谢,有帮助。尽管该消息凭据选项仅适用于我没有的 HTTPS,但仅适用于 HTTP。我尝试了 TransportCredentialOnly,但它说绑定之间不匹配,即使 TransportCredentialOnly 是我的 web.config 中的内容?
  • 你说得对,我在 Security.Mode 方面犯了一个错误。我已经更新了我的答案。能否请您发布整个错误消息?
猜你喜欢
  • 1970-01-01
  • 2015-12-29
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
相关资源
最近更新 更多