可能已发现原始问题的解决方案(如下)。我注释掉了
<identity>
...
</identity>
客户端的app.config文件中的标记。但我不确定这是否会导致其他问题,如果确实如此,有人可以告诉我吗?
我一直关注MSDN上的Getting Started tutorial WCF。
我在Vista x64上使用Visual Studio.net 2008。服务程序运行正常。但是,客户端遇到了问题。
当我运行客户端时,我得到了这个例外:
SecurityNegotiationException未处理 SOAP安全协商 'http://localhost:8000/ServiceModelSamples/Service/CalculatorService'代表目标 'http://localhost:8000/ServiceModelSamples/Service/CalculatorService'失败了。 有关详细信息,请参阅内部异常。
内部异常消息说:
“安全支持提供程序接口(SSPI)协商失败。”
我的代码与示例完全相同。我从来没有真正做过Web服务或WCF或类似的事情。任何人都知道如何解决这个问题?感谢。
编辑 - 我忘了提到抛出异常的地方...... 在客户的主要方法中:
CalculatorClient client = new CalculatorClient();
double value1 = 100.00;
double value2 = 15.99;
double result = client.Add(value1, value2); //This is the line that throws the error
//...
我添加了client.Open();在客户端初始化之后,因为我搜索了谷歌,而且有人也遇到了问题并且帮助了他,但是当我这样做时,新行上会抛出相同的异常。
答案 0 :(得分:2)
SSPI失败是与Kerberos相关的安全协商失败。您是否在域中,并且您现在可能无法与域控制器通信?或者还有另一个原因导致您目前无法进行身份验证?
答案 1 :(得分:0)
在您的服务合约属性中添加以下行
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")]
答案 2 :(得分:0)
我也有这个错误。在我的情况下,它是由客户端上的Web.config文件中的<identity>
部分引起的。当我从TFS获取文件时,<userPrincipalName value="xxx@yyy.com" />
部分中有一个条目被其他人的ID值覆盖。此条目基本上标识了您,因此如果您在网络上,这应该与您的网络登录ID匹配。
答案 3 :(得分:0)
我在遵循Microsoft的教程http://msdn.microsoft.com/en-us/library/ms734712.aspx
时也遇到了此错误我的笔记本电脑已连接到目前无法使用的域。基于我在这里找到的内容,我进入了客户端app.config文件并通过删除userPrincipleName解决了这个问题。
此:
<identity>
<userPrincipalName value="user@contoso.com" />
</identity>
成为:
<identity>
</identity>
然后我重新编译了客户端应用程序,一切正常。