Jak korzystać z usługi WCF Dual Service przez Internet?

Podążyłem za tym samouczkiem (przynajmniej w oparciu o moje WCF, bo muszę wtedy pracować tak samo):http://www.eggheadcafe.com/tutorials/wcf/b5ada8df-58c5-492f-b368-457b3a4f137c/notify-client-applications-using-wcf-callbacks.aspx

Działa bardzo dobrze na moim komputerze, ale muszę go używać przez Internet. Próbując to zrobić, usłyszałem (przez Internet), że lepiej jest użyć netTcpBiding.

Będę mieć serwer, który będzie świadomy liczby klientów online. Chciałem mieć usługę WFC na moim IIS na serwerze i usługę Windows ją pobierającą i powiadamiającą o tym. Potrzebuję wywołania zwrotnego, ponieważ serwer czasami musi być w stanie wykonać niektóre polecenia na kliencie.

Byłbym bardzo zadowolony, gdyby ktoś mógł mi pomóc.

Z góry dziękuję,

Edytować:

Wyjaśnienie: po prostu nie mogłem sprawić, by działało przez Internet. Czy możecie mi pokazać, jak mogę zmienić moje konfiguracje (Web.config e App.config), aby używać netTcpBinding i pracować przez Internet?

Dzięki jeszcze raz,

Edytuj 2:

Mój Web.config w mojej aplikacji WCFServiceApplication to:

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

Moja aplikacja App.config w mojej usłudze WindowsService to:

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

Po prostu zmiana na netTcpBinding nie działa ...

Ale byłbym wystarczająco zadowolony, aby móc uruchomić to przez Internet ... Opublikowałem WCFService na IIS. Spinki do mankietów:

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

LUB

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

Wystarczy zmienić konfigurację, aby działała przez Internet? tak jak powiedziałem, lokalne działa dobrze.

Pomyślałem, że po prostu zmiana adresu punktu końcowego na kliencie na jeden z adresów URL nad nim będzie działać, ale nie ...

Przykład, który podłączyłeś, obsługuje usługę w WPF. Nie wiem, czy dotyczy to mojego cenario ...

i Myślę, że pozostanę przy DualHttpBinding, nie sądzisz, że przekierowanie portów jest dobre dla moich potrzeb, mogę mieć wielu klientów w jednym intranecie i zdecydować, który router wyśle ​​informacje do routera bo nie jest dobrze, prawda? lub istnieje sposób, aby router odpowiedział poprawnie na każdą maszynę łączącą się z moim serwerem za pośrednictwem tego samego portu ?! (tylko pytam, hehehe)

Z góry dziękuję,

Edytuj w dniu 21.06.2012:

Dzięki za czytanie. Nie udało mi się uruchomić usługi z netTcpBinding w sieci LAN. Zrobiłem próbną próbkę mojego cenario. Jegotutaj. Zwany testem DualCommunicationTest.

Kiedy zacząłem ten post, chciałem tylko wiedzieć, jak sprawić, by ten cenarion działał w Internecie. Tylko to. Podczas szukania rozwiązania przed opublikowaniem tutaj przeczytałem, że netTcpBinding jest lepszy. Więc zapytałem o to. To było tylko pytanie poboczne.

Więc ... moje obecne potrzeby na poczcie to:

Jak używaćpróbka, którą opracowałem w Internecie.

LUB

Jak zrobićpróbka, którą opracowałem pracuj z netTcpBinding I wtedy będziesz mógł z niego korzystać w Internecie. (Jestem prawie pewienClunky Coder nauczył mnie drugiej części, jak opublikować net.tcp w Internecie z IIS i innymi rzeczami, dziękuję bardzo za to, ale nie byłem jeszcze w stanie przetestować tego, ponieważ nie mogłem jeszcze zrobić netTcp.)

Przepraszam, jeśli nie jestem wystarczająco jasny, mój angielski nie jest taki dobry. sry i jeszcze raz dziękuję, dużo.

questionAnswers(2)

yourAnswerToTheQuestion