Śledziłem ten poradnik (przynajmniej na podstawie mojego WCF w to, bo muszę wtedy pracować podobnie): http://www.eggheadcafe.com/tutorials/wcf/b5ada8df-58c5-492f-b368-457b3a4f137c/notify-client-applications-using-wcf-callbacks.aspxJak korzystać z podwójnej usługi WCF przez Internet?
To działa bardzo dobrze na moim komputerze, ale trzeba go używać przez internet. Próbując to zrobić usłyszałem (przez Internet), że lepiej jest użyć netTcpBiding.
Będę miał serwer, który będzie świadomy liczby klientów online. Chciałem usługi WFC na moim IIS na serwerze i usługi windows pochłaniając go i powiadamiając go. Potrzebuję wywołania zwrotnego, na którym serwer musi mieć możliwość wykonania niektórych poleceń na kliencie.
Byłbym bardzo zadowolony, gdyby ktoś mógł mi pomóc.
Dzięki z góry,
Edit:
Making się jasno: nie mogłem zrobić to praca przez Internet. Czy możecie pokazać mi, jak mogę zmienić konfiguracje (Web.config e App.config), aby korzystać z netTcpBinding i pracować przez Internet? znowu
Dzięki,
Edit 2:
Moje Web.config w moim WCFServiceApplication jest:
<?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>
My App.config w moim Usługa Windows jest:
<?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 go na netTcpBinding nie działa ...
Ale byłbym zadowolony, że mogę go uruchomić przez Internet ... Opublikowałem WCFService na IIS. Linki:
https://www2.tcenter.com.br/monitor/PCWatcherWCFService.svc
LUB
http://www2.tcenter.com.br:8080/monitor/PCWatcherWCFService.svc
Tylko zmieniając configs jej wystarczających, aby pracować przez internet? jak powiedziałem, lokalny to działa dobrze.
Myślałem, że tylko zmiana adresu punktu końcowego na kliencie do jednego z adresów URL powyżej whould to działa, ale to nie ...
Przykładem, który połączony gospodarzom usługę w WPF. Nie wiem, czy to dotyczy mojego cenario ...
Myślę, że będę trzymać się DualHttpBinding, nie myślisz, że port przesyła to dobrze dla moich potrzeb, mogę mieć dużo klientów w jednym intranecie i mając router, który zadecyduje, który z nich prześle informacje, bo nie jest to dobre? lub jest sposób, aby router odpowiadał poprawnie na każdą maszynę podłączoną do mojego serwera za pośrednictwem tego samego portu ?!(Tylko pytam, hehehe)
Dzięki dużo wcześniej,
zmienił 21/06/2012:
Dzięki za czytanie. Nie mogłem uzyskać usługi do pracy z netTcpBinding w sieci LAN. Zrobiłem próbną próbkę mojego cenario. Jest to here. Nazywany testem DualCommunicationTest.
Kiedy zaczynałem ten post, chciałem tylko wiedzieć, jak sprawić, by to cenario działało w Internecie. Tylko to. Podczas mojego szukania rozwiązania przed opublikowaniem tutaj, przeczytałem, że netTcpBinding jest lepszy. Więc zapytałem o to. To było tylko poboczne pytanie.
... Więc moje obecne potrzeby na stanowisku to:
Jak korzystać the sample i developed w Internecie.
LUB
Jak the sample i developed pracę z netTcpBinding a następnie być w stanie wykorzystać je w internecie. (Jestem całkiem pewna, że Clunky Coder nauczyła mnie drugiej części, jak opublikować net.tcp w Internecie z IIS i innymi rzeczami, dziękuję za to, ale nie byłem w stanie przetestować go jeszcze, ponieważ nie mogłem t jeszcze zrobić netTcp.)
Przepraszam, jeśli nie jestem wystarczająco jasne, mój angielski nie jest tak dobry. sry i jeszcze raz dziękuję, bardzo.
Czytanie naprawdę ... ok, nie wiem już, czy idę dla netTcp lub wsDual, ale, czy mógłbyś mi pomóc, aby to działało? Cieszę się, po prostu wstawiając przykład zaimplementowany w powyższym linku do pracy ... –
@ TanielianBarreira, właśnie obejrzałem artykuł, wydaje się dobrze napisany, jaki jest dokładnie problem? Wdraża prostą usługę czatu według jej wyglądu, istnieje wiele przykładów wywołań zwrotnych w WCF. Istota pomysłu polega na tym, że klient wywołuje pewne operacje w usłudze, a usługa może z kolei wywołać metodę na kliencie (jest to wywołanie zwrotne), więc klient tymczasowo będzie jak serwer. Metody w 'ChatService' są tym, co klienci wywołują na serwerze, a metody w' IChatServiceCallback' są tym, co usługa wywołuje na klientach. –
@ TanielianBarreira spójrz na moją aktualizację. –