¿Cómo utilizar un Servicio Dual WCF a través de Internet?

Seguí este tutorial (al menos basé mi WCF en esto, porque necesito trabajar de igual manera):http://www.eggheadcafe.com/tutorials/wcf/b5ada8df-58c5-492f-b368-457b3a4f137c/notify-client-applications-using-wcf-callbacks.aspx

Está funcionando muy bien en mi computadora, pero necesito usarlo a través de Internet. Mientras intentaba hacer esto, escuché (a través de Internet) que es mejor usar netTcpBiding.

Tendré un servidor que estará al tanto de la cantidad de clientes en línea. Quería un servicio WFC en mi IIS en el servidor, y un servicio de Windows lo consumía y lo notificaba. Necesito la devolución de llamada porque el servidor tiene que ser capaz de ejecutar algunos comandos en el cliente.

Estaría muy contento si alguien pudiera ayudarme.

Gracias por adelantado,

Editar:

Dejándome claro: simplemente no podía hacer que funcionara a través de Internet. ¿Pueden mostrarme cómo puedo cambiar mis configuraciones (Web.config e App.config) para usar netTcpBinding y trabajar a través de Internet?

Gracias de nuevo,

Edición 2:

Mi Web.config en mi aplicación WCFService es:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WSDualHttpBinding_IPCWatcherWCFService" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
            maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
            messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
              maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00" />
          <security mode="Message">
            <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="TiT.PCWatcher.Server.WCFService.Services.PCWatcherWCFServiceBehavior" name="TiT.PCWatcher.Server.WCFService.Services.PCWatcherWCFService">
        <endpoint address="" binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IPCWatcherWCFService" contract="TiT.PCWatcher.Server.WCFService.Interfaces.IPCWatcherWCFService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="TiT.PCWatcher.Server.WCFService.Services.PCWatcherWCFServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

Mi App.config en mi Servicio de Windows es:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <wsDualHttpBinding>
        <binding name="WSDualHttpBinding_IPCWatcherWCFService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00" />
          <security mode="Message">
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsDualHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:25145/Services/PCWatcherWCFService.svc"
        binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IPCWatcherWCFService"
        contract="PCWatcherWCFServiceReference.IPCWatcherWCFService"
        name="WSDualHttpBinding_IPCWatcherWCFService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

Simplemente cambiándolo a netTcpBinding no funciona ...

Pero me alegraría lo suficiente como para poder ejecutar esto a través de Internet ... Publiqué el servicio WCFS en IIS. Campo de golf:

https://www2.tcenter.com.br/monitor/PCWatcherWCFService.svc

O

http://www2.tcenter.com.br:8080/monitor/PCWatcherWCFService.svc

¿Simplemente cambiar las configuraciones es suficiente para que funcione a través de Internet? como he dicho, local funciona bien.

Pensé que solo el cambio de la dirección del punto final en el cliente a una de las URL anteriores funcionaría, pero no ...

El ejemplo que vinculó aloja el servicio en el WPF. No sé si se aplica a mi cenario ...

Creo que voy a seguir con DualHttpBinding, no crees que el reenvío de puertos sea bueno para mis necesidades, puedo tener muchos clientes en una intranet y hacer que el enrutador decida a cuál enviará la información. porque no es bueno verdad? ¿O hay una manera de hacer que el enrutador responda correctamente a todas y cada una de las máquinas que se conectan a mi servidor web a través del mismo puerto? (solo preguntando, jejeje)

Muchas gracias por adelantado,

Edición el 21/06/2012:

Gracias por la lectura. No he podido hacer que el servicio funcione con netTcpBinding en LAN. Hice una muestra simulada de mi cenario. Susaquí. Llamado DualCommunicationTest.

Cuando comencé esta publicación, solo quería saber cómo hacer que esta cena se ejecutara en Internet. Solo eso. Durante mi búsqueda de una solución antes de publicar aquí, leí que netTcpBinding es mejor. Así que pregunté al respecto. Era solo una pregunta secundaria.

Así que ... mis necesidades actuales en el post son:

Cómo utilizarla muestra que desarrollé En Internet.

O

Cómo hacerla muestra que desarrollé trabaje con netTcpBinding Y luego podrá usarlo en Internet. (Estoy bastante seguroCodificador Clunky La segunda parte me enseñó cómo publicar un net.tcp en Internet con IIS y demás, muchas gracias por eso, pero aún no pude probarlo porque todavía no podía hacer un netTcp.

Lo siento si no he sido lo suficientemente claro, mi inglés no es tan bueno. Sry y gracias de nuevo, mucho.

Respuestas a la pregunta(2)

Su respuesta a la pregunta