net.tcp hosted in IIS7.5 on windows 7 virtual machine using .NET 4.0

1.6k views Asked by At

I have the simplest WCF service which works when hosted in IIS using basicHttp binding. It has one empty method called DoNothing which takes no parameters and returns a void

void DoNothing()

However I cannot get it to work when trying to host it in IIS using net.tcp.

I am assuming it is the configuration, as the same service code should work regardless of binding used.

I have enabled non-http activation. I am using a different port 12345 to avoid any clashes. The website and service is set up to use net.tcp binding.

The Net.Tcp ListenerAdaptor and Net.Tcp Port Sharing services are running

I can get the metadata to use WcfTestClient to test the service.

The error I get is

The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:59.8597984'.

The inner exception is

An existing connection was forcibly closed by the remote host

I thing I have checked everything. I have tried calling it remotely and locally on the virtual machine

I can only think it is a simple config error or a security issue. The virtual machine is not in a domain. I have disabled the firewall completely on the virtual machine.

Has anyone had the same issue, and has a resolution. Or does someone have a very simple (full) example of how to host a net.tcp service in IIS, whih they could post

Here is my web.config

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="PortSharingBinding" portSharingEnabled="true">
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service name="SimpleNetTcpService.Service">
        <endpoint address="net.tcp://192.168.0.2:12345/SimpleNetTcpService/Service"
          binding="netTcpBinding" bindingConfiguration="PortSharingBinding" 
          contract="SimpleNetTcpService.IService" />

        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>
1

There are 1 answers

0
Michael On

I found the issue. I just removed the address attribute from the service element was

<service name="SimpleNetTcpService.Service">
        <endpoint address="net.tcp://192.168.0.2:12345/SimpleNetTcpService/Service"
          binding="netTcpBinding" bindingConfiguration="PortSharingBinding" 
          contract="SimpleNetTcpService.IService" />

now

<service name="SimpleNetTcpService.Service">
        <endpoint 
          binding="netTcpBinding" bindingConfiguration="PortSharingBinding" 
          contract="SimpleNetTcpService.IService" />

Works fine now