Wcf HTTP请求未经客户端身份验证方案';谈判';

Wcf HTTP请求未经客户端身份验证方案';谈判';,wcf,authentication,windows-authentication,Wcf,Authentication,Windows Authentication,1) 在机器A上-我在机器A上创建了一个WCF服务,并将其托管在IIS 5.1上。它正在这个URL下运行http://mydomain/SetupPOCService/Service1.svc 2) 在机器B上,我创建了一个Asp.net Web应用程序。在这个应用程序中,我尝试使用以前创建的WCF服务,该服务现在托管在另一个m/c上,即MachineA。 当我从VisualStudio环境运行这个web应用程序时,它会访问MachineA的WCF服务并获取数据 ---直到这里都很好--- 3)

1) 在机器A上-我在机器A上创建了一个WCF服务,并将其托管在IIS 5.1上。它正在这个URL下运行
http://mydomain/SetupPOCService/Service1.svc

2) 在机器B上,我创建了一个Asp.net Web应用程序。在这个应用程序中,我尝试使用以前创建的WCF服务,该服务现在托管在另一个m/c上,即MachineA。 当我从VisualStudio环境运行这个web应用程序时,它会访问MachineA的WCF服务并获取数据

---直到这里都很好---

3) 在机器B上-现在我在IIS5.1中托管了我的Web应用程序 此web应用程序在此处工作正常,但无法访问MachineA的WCF服务,并出现此类错误

远程服务器返回错误:(401)未经授权。

堆栈跟踪 [MessageSecurityException:HTTP请求未经客户端身份验证方案“协商”授权。从服务器收到的身份验证标头为“协商,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>

转到IIS。你可以找到一些叫做“基本设置”的东西。添加您的权限和计算机的权限。您可能不允许访问网络中的某些边界

  • 转到“启动|设置|控制面板|管理工具|本地安全设置”
  • 转到当地政策|安全选项
  • 选择网络安全:Lan Manager身份验证级别
  • 在“下拉列表”中选择第二个值发送LM和NTLM
另外,
ClientCredentialType=Windows
使身份验证头
协商
,这不足以使其与
协商、NTLM

但是,设置
client.ClientCredentials.Windows.AllowNTLM=True
会将必要的NTLM添加到身份验证头中,并且可以正常工作


还可以尝试以管理员身份运行VS,以防万一。:)

我的解决方案是设置
ClientCredentialType=“Ntlm”

AllowNTLM不推荐使用,它说我应该在本地设置策略?我该怎么做?你好,我也有类似的情况。你有没有这样做过?在解决方案中,你在哪里设置这个ClientCredentialType?