创建WCF Web Service for IIS并在我的ASP.NET开发服务器中成功测试后,当我将服务部署到另一台机器的 IIS时,它总是会在消耗时触发以下异常:
测试方法PoolingServiceTest.ProgramTest.MainTaskTest抛出异常:System.ServiceModel.CommunicationObjectFaultedException:O objetodecomunicação,System.ServiceModel.Channels.ServiceChannel,nãopodeser usadoparacomunicaçãoporqueestánoestado Com Falha ..
英文:该对象不能用于通信,因为它有故障(故障)
堆栈跟踪
System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout) System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 type) System.ServiceModel.ICommunicationObject.Close(TimeSpan超时) System.ServiceModel.ICommunicationObject.Close(TimeSpan超时) 关() System.IDisposable.Dispose()
我该怎么做才能避免这种情况?
使用围绕客户端代码的try catch块,我得到了一个不同的例外:
[System.ServiceModel.Security.SecurityNegotiationException] {“Ochamadornãofoiautenticadopelservorviço。”} System.ServiceModel.Security.SecurityNegotiationException
英文:呼叫者未通过服务验证
答案 0 :(得分:3)
很明显,从第二条消息开始,服务期望调用者进行身份验证。根据您使用的绑定(协议),这可能是以下几种方法之一:
Windows身份验证:默认情况下为wsHttp和netTcp绑定启用 - 将使用用户的Windows帐户(这要求主叫用户和被叫服务位于同一Windows域,或至少在受信任的域中)
针对ASP.NET成员身份的用户名/密码身份验证 - 这通常需要相当多的配置,因此我认为您不会“默认启用”
X.509证书 - 再次需要配置
我的猜测是:您的网络IIS服务器以某种方式无法正确理解/解释调用方的身份。该IIS服务器可能不是Active Directory域的成员吗?或者呼叫者的计算机不是同一个域的成员?我认为它必须是那个领域的东西。
马克
<强> PS:强>
要一起关闭安全性(不推荐! - 至少不适用于真实的生产系统),您可以这样做:
<bindings>
<basicHttpBinding>
<binding name="NoSecurity">
<security mode="None" />
</binding>
</basicHttpBinding>
然后引用端点(服务器端和客户端)的绑定配置:
<endpoint address="....."
binding="basicHttpBinding"
bindingConfiguration="NoSecurity"
contract="IMyService" />