Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What exactly do I need to do to host a WCF service in IIS 7.0 using netTcpBinding?

I've been trying for more than a week without any success at all, to host a very simple HelloWorld-like wcf service using netTcpBinding.

With http, everything is ok. I can access my service even from a remote machine. But with tcp problems arise.

I have performed all the steps I'm supposed to, in order to host my service in WAS:

  • .Net 3.0 Features are enabled, including http and non-http Activation

  • I have granted 'Network Service' and 'IIS_IUSRS' the following permissions to the folder containing the site:

    • Read & Execute
    • List Folder Contents
    • Read
  • Opened de ports 8100 and 8086 in the firewall.

  • At IIS Manager/ Actions / Bindings the following bindings are set up:

    • http 8100:*
    • net.tcp 8086:*
  • At IIS Manager/ Manage Web Site / Advanced Settings, both, http and net.tcp protocols are enabled.

The original problem I had was that I was able to reach the service via http but when trying with tcp I got the following error:

"The message could not be dispatched because de service at the endpoint addres 'net.tcp://myDomain/HelloWorld.Hello.svc' is unavailable for the protocol address."

I found a post in this site whose author had the same problem and It was solved by reinstalling .net 3.0 features. So I tryed that. I also tryed to reinstall IIS 7.0 just in case. Now, the situation is worse than it was at the begining. If I configure an endpoint with tcpBinding in my Web.Config I can't even reach my service at it's http address using IE!! I get the following message:

Could not find a base address that matches scheme net.tcp for the endpoint with binding NetTcpBinding. Registered base address schemes are [http].

The Web.Config file is as follows:


       name="HelloWorld.Hello">
       <host>
          <baseAddresses>
             <add baseAddress="http://myDomain:8100/HelloWorld/" />
         <add baseAddress="net.tcp://myDomain:8086/HelloWorld/" />
          </baseAddresses>
       </host>          

       <endpoint address=""
                 binding="wsHttpBinding"
                 contract="HelloWorld.IHello"
                 bindingConfiguration="httpInseguro">
       </endpoint>

       <endpoint address=""
                 binding="netTcpBinding"
                 contract="HelloWorld.IHello"
                 bindingConfiguration="netTcpInseguro">
       </endpoint>


       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    </service>
 </services>

<bindings>

  <wsHttpBinding>
    <binding name ="httpInseguro">
      <security mode ="None" />
    </binding>        
  </wsHttpBinding>

  <netTcpBinding>
    <binding name ="netTcpInseguro">
      <security mode ="None" />
    </binding>        
  </netTcpBinding>

</bindings>

and the .svc file is like this:

Could anyone please give me a clue about what's going on? I really don't know what else to do. This is being a real headacke becasuse using http binding is not an option. Thanks in advance.

like image 401
Gonzalo Méndez Avatar asked Jul 09 '09 18:07

Gonzalo Méndez


People also ask

What are 3 basic WCF configuration required for hosting a WCF service?

There are three types of hosting environments for WCF services: IIS, WAS, and self-hosting. The term “self-hosting” refers to any application that provides its own code to initialize the hosting environment. This includes console, Windows Forms, WPF, and managed Windows services.

What is the need for the activation or hosting of a WCF service?

WAS Hosting − Hosting a WCF service in Windows Activation Service (WAS) is most advantageous because of its features such as process recycling, idle time management, common configuration system, and support for HTTP, TCP, etc.

Which IIS version supports hosting of WCF service in Windows Activation Service was )?

Windows Process Activation Service (WAS)IIS 7.0 uses WAS to accomplish message-based activation over HTTP. Additional WCF components also plug into WAS to provide message-based activation over the other protocols that WCF supports, such as TCP, MSMQ, and named pipes.


2 Answers

You'll need to enable the TCP hosting in WAS by calling appcmd.exe:

%windir%\system32\inetsrv\appcmd.exe set site 
    "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='*']

Check out the MSDN documenation or Michele Leroux Bustamante's article on this topic - it contains all the info you'll need.

Marc

like image 178
marc_s Avatar answered Sep 24 '22 05:09

marc_s


Thnak you for your answer and for the links. I'll check them. I forgot to tell but I had already enable TCP hosting on was. Someone suggested me to add this to the config file:

<endpoint address="mextcp" binding="mexTcpBinding" contract="IMetadataExchange"/>

And now it's working ok. Best regards,

Gonzalo

like image 45
Gonzalo Méndez Avatar answered Sep 24 '22 05:09

Gonzalo Méndez