wcfcredentialswsdualhttpbinding

WsDualHttpBinding doesn't call back client, timely manner issues


Ithis issue has already been asked over and over but whatever the solution was on people's project, it doesn't work for me.

I have a WsDualHttpBinding to call a service from a client. My config for the client is this :

 <bindings>
  <wsDualHttpBinding>
    <binding name="wsDualHttpBindingConfiguration" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:05:00" bypassProxyOnLocal="true" />
  </wsDualHttpBinding>
</bindings>

my clients are defined like this a bit further :

<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>

this work in local mode, on the same machine. When i deploy the service on a server and launch my client i get the following error message after a 1 minute timeout :

Unhandled exception: System.ServiceModel.CommunicationException: Security negotiation failed because the remote party did not send back a reply in a timely manner. This may be because the underlying transport connection was aborted.

I understand that the problem is either because of the port (but here i deployed it especialy on a different one from 80) or security issues.

So i tried to insert security attributes to my binding configuration:

<security mode="none" />

<security mode="message"><message clientCredentialType="None"/></security>

and others that i don't remember. I can't get to my service even on the same machine once I deployed it while it worked fine on VS2012.

My services are well hosted, i can reach them from a web browser and from distant machines.

Thanks in advance.

PS : Is there any way to configure WsDualHttpBinding in an absolutely non secure way, that would not ask any credential at all?


Solution

  • I had the same issue, but it was because of my client code. For example:

    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.");