我需要调用一个Web服务,为了便于测试,我已经为此创建了一个Console-app。但它需要在BizTalk中工作,而事实并非如此。
这是app.config中非常简单的配置:
<basicHttpBinding>
<binding name="XXXWebService_Binding" textEncoding="utf-16">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
在调用Web服务之前,我需要指定Windows凭据:
proxy.ClientCredentials.Windows.ClientCredential.Domain = "xxx";
proxy.ClientCredentials.Windows.ClientCredential.UserName = "xxx";
proxy.ClientCredentials.Windows.ClientCredential.Password = "xxx";
这应该有效。
所以我需要在BizTalk中使用它。我使用带有basicHttpBinding的WCF-Custom适配器,其配置与我的Console-App相同:
要指定凭据,我将它们插入凭据选项卡中。
当我测试这个时,我收到此错误消息:
System.Net.WebException: The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate'.
有谁知道这可能是什么?
在MSDN上(对于WCF-BasicHttp Adapter)我发现了这个: Windows:Windows集成身份验证。运行此发送端口的用户帐户用于服务以验证此发送端口。
是否可以忽略正确的凭据并使用主机实例的凭据(即使我可以在“传输失败”消息的上下文属性中找到正确的凭据)?
感谢您的帮助!
答案 0 :(得分:3)
Windows身份验证将使用登录用户的帐户执行进程,对于BizTalk,将使用主机实例服务帐户。
“凭据”框仅适用于“基本身份验证”。这就是它的连接方式。
我从未走过这条路,但我认为您需要使用自定义绑定元素(如行为)来设置备用Windows凭据。