[英]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.