1)在机器A上 - 我在MachineA上创建了一个WCF服务并将其托管在IIS 5.1上。在此网址http://mydomain/SetupPOCService/Service1.svc
2)在机器B上 - 我创建了一个Asp.net Web Applciation。在这个应用程序中,我试图使用先前创建的WCF服务,该服务现在托管在另一个m / c即MachineA上。 当我从Visual Studio环境运行此Web应用程序时,它访问MachineA的WCF服务并获取数据。
---直到这里---
3)在机器B上 - 现在我在IIS5.1中托管了我的Web应用程序 这个Web应用程序在这里工作正常,但无法访问MachineA的WCF服务并发出此类错误。
远程服务器返回错误:(401)未经授权。
栈跟踪 [MessageSecurityException:HTTP请求未经授权,客户端身份验证方案为“Negotiate”。从服务器收到的身份验证标头是“Negotiate,NTLM”。]
我尝试了很多东西,但它有助于它。 请提供您的意见......
以下是客户端的Web.Config
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
以下是服务器的Web.Config
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
答案 0 :(得分:7)
转到IIS。你会发现一种叫做“基本设置”的东西。添加您的权限和计算机的权限。您可能无法访问网络中的某些边界。
同样ClientCredentialType=Windows
会生成身份验证标头Negotiate
,但这还不足以使其与Negotiate, NTLM
一起使用
但是,设置client.ClientCredentials.Windows.AllowNTLM = True
会将必要的NTLM添加到身份验证标头中,并且可以正常运行。
另请尝试以管理员身份运行VS以防万一。 :)
答案 1 :(得分:0)
我的解决方案是设置ClientCredentialType="Ntlm"
。