这个问题已经被一遍又一遍地问过,但无论解决方案是针对人们的项目,它都不适用于我。
我有一个WsDualHttpBinding来从客户端调用服务。我对客户端的配置如下:
<bindings>
<wsDualHttpBinding>
<binding name="wsDualHttpBindingConfiguration" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:05:00" bypassProxyOnLocal="true" />
</wsDualHttpBinding>
</bindings>
我的客户的定义更进一步:
<client>
<endpoint address="http://{ipadress}:60379/ConfigurationCompleterService.svc"
binding="wsDualHttpBinding" bindingConfiguration="wsDualHttpBindingConfiguration"
contract="InfluxConfigurationCompleterService.IConfigurationCompleterService"
name="WSDualHttpBinding_IConfigurationCompleterService">
<identity>
<userPrincipalName value="{domain-username}" />
</identity>
</endpoint>
<!--wsDualHttpBindingConfiguration-->
<endpoint address="http://{ipadress}:60379/ConfigurationImportService.svc"
binding="wsDualHttpBinding" bindingConfiguration="wsDualHttpBindingConfiguration"
contract="ConfigurationImportServiceReference.IConfigurationImportService"
name="WSDualHttpBinding_IConfigurationImportService">
<identity>
<userPrincipalName value="{domain-username}" />
</identity>
</endpoint>
</client>
这项工作在本地模式下,在同一台机器上。当我在服务器上部署服务并启动我的客户端时,我在超时1分钟后收到以下错误消息:
未处理的异常:System.ServiceModel.CommunicationException:安全协商失败,因为远程方未及时发回回复。这可能是因为底层传输连接中止了。
据我所知,这个问题要么是因为端口(但我在这里部署了它,特别是在80以上的其他部分)或安全问题。
所以我尝试将安全属性插入到我的绑定配置中:
<security mode="none" />
<security mode="message"><message clientCredentialType="None"/></security>
和其他我不记得了。 一旦我在VS2012上工作正常,我甚至无法在同一台机器上使用我的服务。
我的服务很好,我可以通过网络浏览器和远程机器与他们联系。
提前致谢。
PS:有没有办法以绝对不安全的方式配置WsDualHttpBinding,根本不会要求任何凭证?
答案 0 :(得分:0)
我遇到了同样的问题,但这是因为我的客户端代码。例如:
WSDualHttpBinding binding = new WSDualHttpBinding();
binding.Security.Mode = WSDualHttpSecurityMode.None; <-- I forgot this line.
EndpointAddress endpoint = new EndpointAddress("http://localhost/CardService.svc");
DuplexChannelFactory<ICardService> channelFactory = new DuplexChannelFactory<ICardService>(this, binding, endpoint);
ICardService channel = channelFactory.CreateChannel();
string message = "Hello, service.";
Console.WriteLine("Successfully created the channel. Pinging it with message \"{0}\".", message);
channel.Ping(message);
Console.WriteLine("Successfully pinged the channel.");