3

这个问题已经被一遍又一遍地问过了,但是无论人们的项目是什么解决方案,它都对我不起作用。

我有一个 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,根本不需要任何凭证?

4

1 回答 1

1

我有同样的问题,但这是因为我的客户端代码。例如:

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.");
于 2014-06-14T02:17:24.547 回答