Como usar um serviço duplo WCF pela internet?

Eu segui este tutorial (pelo menos baseado o meu WCF nisso, porque eu preciso então trabalhar da mesma forma):http://www.eggheadcafe.com/tutorials/wcf/b5ada8df-58c5-492f-b368-457b3a4f137c/notify-client-applications-using-wcf-callbacks.aspx

Está funcionando muito bem no meu computador, mas eu preciso usá-lo pela internet. Ao tentar fazer isso eu ouvi (através da internet) que é melhor usar netTcpBiding.

Eu vou ter um servidor que vai estar ciente do número de clientes on-line. Eu queria um serviço WFC no meu IIS no servidor e um serviço do Windows consumindo e notificando-o. Eu preciso do retorno de chamada porque o servidor em algum momento tem que ser capaz de executar alguns comandos no cliente.

Eu ficaria muito satisfeito se alguém pudesse me ajudar.

Desde já, obrigado,

Editar:

Ficando claro: eu simplesmente não consegui fazer funcionar pela internet. Vocês podem me mostrar como eu posso mudar minhas configurações (Web.config e App.config) para usar netTcpBinding e trabalhar pela internet?

Obrigado novamente,

Editar 2:

Meu Web.config no meu WCFServiceApplication é:

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

Meu App.config no meu WindowsService é:

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

Basta alterá-lo para netTcpBinding não funciona ...

Mas eu ficaria feliz o suficiente para ser capaz de executar isso pela internet ... Eu publiquei o WCFService no IIS. Links:

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

OU

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

Apenas mudando as configurações para fazer funcionar através da internet? como eu disse, local funciona muito bem.

Eu pensei que apenas alterar o endereço do ponto de extremidade no cliente para uma das URLs acima dele funcionaria, mas não ...

O exemplo que você vinculou hospeda o serviço no WPF. Não sei se é apply no meu cenario ...

Eu acho que vou ficar com o DualHttpBinding, você não acha que o encaminhamento de porta é bom para as minhas necessidades, eu posso ter muitos clientes em uma intranet e ter o roteador decidir qual ele vai enviar informações porque não é bom né? ou há uma maneira de fazer o roteador responder corretamente a cada máquina conectando ao meu servidor pela mesma porta ?! (só perguntando, hehehe)

Muito obrigado antecipadamente,

Editar em 21/06/2012:

Obrigado pela leitura. Não consegui fazer com que o serviço funcionasse com netTcpBinding na LAN. Eu fiz uma amostra simulada do meu cenario. EstáAqui. Chamado DualCommunicationTest.

Quando eu comecei este post, eu só queria saber como fazer isso funcionar na internet. Só isso. Durante meu tempo procurando por uma solução antes de postar aqui, eu li que netTcpBinding é melhor. Então eu perguntei sobre isso. Foi apenas uma questão colateral.

Então ... minhas necessidades atuais no post são:

Como usara amostra que eu desenvolvi na internet.

OU

Como fazera amostra que eu desenvolvi trabalhe com netTcpBinding e então possa usá-lo na internet. (Eu tenho certezaCoder desajeitado me ensinou a segunda parte, sobre como publicar um net.tcp na internet com o IIS e outras coisas, muito obrigado por isso, mas eu não pude testá-lo ainda, porque eu não pude fazer um netTcp ainda.)

Me desculpe se eu não tenho sido claro o suficiente, meu inglês não é tão bom. sry e obrigado novamente, muito.

questionAnswers(2)

yourAnswerToTheQuestion