簡體   English   中英

通過channelfactory調用WCF Web服務時出錯-不允許

[英]Error calling WCF webservice through channelfactory - not permissioned

我正在使用ChannelFactory調用WCF服務(因為目標服務的位置將根據環境而變化,並且我需要URL是可配置的)。 但是我得到了錯誤:

客戶端身份驗證方案“匿名”未授權HTTP請求。 從服務器收到的身份驗證標頭是“ Negotiate,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身份驗證來傳遞該代碼作為(服務帳戶)運行的帳戶,但它似乎在發送匿名郵件

您必須將模式設置為使用消息憑據進行傳輸,如以下代碼所示:

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

另外,您可以在綁定的構造函數中設置模式:

var myBinding = new BasicHttpBinding(SecurityMode.TransportCredentialOnly);

還要設置ClientCredential:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM