Ho seguito questo tutorial (almeno in base mia WCF in questo, coz ho bisogno quindi di lavorare allo stesso modo): http://www.eggheadcafe.com/tutorials/wcf/b5ada8df-58c5-492f-b368-457b3a4f137c/notify-client-applications-using-wcf-callbacks.aspxCome utilizzare un doppio servizio WCF su Internet?
Si sta lavorando molto bene sul mio computer, ma ho bisogno di usarlo su internet. Durante il tentativo di farlo ho sentito (su Internet) che è meglio usare netTcpBiding.
Avrò un server che sarà a conoscenza del numero di clienti online. Volevo un servizio WFC sul mio IIS nel server e un servizio Windows che lo consumava e lo notificava. Ho bisogno che il callback coz il server debba essere in grado di eseguire alcuni comandi sul client.
Sarei molto contento se qualcuno potesse aiutarmi.
Grazie in anticipo,
Edit:
stato chiaro: io non riuscivo a farlo funzionare su internet. Ragazzi potete mostrarmi come posso cambiare le mie configurazioni (Web.config e App.config) per usare netTcpBinding e lavorare su internet?
Grazie ancora,
Modifica 2:
mio web.config nel mio 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>
mio app.config nel mio servizio di windows è:
<?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 cambiarlo in netTcpBinding non funziona ...
Ma sarei abbastanza contento di poterlo eseguire su Internet ... Ho pubblicato il WCFService su IIS. Link:
https://www2.tcenter.com.br/monitor/PCWatcherWCFService.svc
O
http://www2.tcenter.com.br:8080/monitor/PCWatcherWCFService.svc
Basta cambiare le configurazioni sua sufficienti per farlo funzionare attraverso internet? come ho detto, locale funziona bene.
ho pensato che solo cambiando l'indirizzo dell'endpoint sul client per una delle URL sopra di essa whould funziona, ma non ha ...
L'esempio che si è collegato ospita il servizio sulla WPF. Non so se si applica al mio cenario ...
i Credo che sto andando con il DualHttpBinding, non pensi che il port forwarding sia buono per le mie esigenze, posso avere un sacco dei clienti in una intranet e avendo il router decidere quale invierà informazioni perché non va bene? o c'è un modo per far sì che il router risponda corretamente a tutte le macchine che si collegano al mio webserver attraverso la stessa porta ?!(Solo chiedendo, hehehe)
Grazie mille in anticipo,
Modifica il 21/06/2012:
Grazie per la lettura. Non sono riuscito a far funzionare il servizio con netTcpBinding in LAN. Ho fatto un campione finto del mio cenario. È here. Chiamato DualCommunicationTest.
Quando ho iniziato questo post, volevo solo sapere come far funzionare questo cenarion su internet. Solo quello. Durante la mia ricerca di una soluzione prima di postare qui, ho letto che netTcpBinding è migliore. Così ho chiesto a questo proposito. Era solo una domanda a parte.
Quindi ... le mie attuali esigenze sul post sono:
Come usare the sample i developed su internet.
O
Come fare the sample i developed lavoro con netTcpBinding e quindi essere in grado di usarlo su internet. (Sono abbastanza sicuro che lo Clunky Coder mi abbia insegnato la seconda parte, su come pubblicare un net.tcp su Internet con IIS e cose del genere, grazie mille per questo, ma non ero ancora in grado di testarlo, perché non potevo t fare un netTcp ancora.)
Mi dispiace se non sono stato abbastanza chiaro, il mio inglese non è così buono. sry e grazie ancora, molto.
Buona lettura davvero ... ok, non lo so più se sto andando su netTcp o su wsDual, ma, potresti per favore aiutarmi a farlo funzionare? Sono felice di mettere l'esempio implementato nel link qui sopra per lavorare ... –
@TanielianBarreira, ho appena guardato l'articolo, sembra ben scritto, qual è esattamente il problema? Sta implementando un semplice servizio di chat dall'aspetto, ci sono molti esempi sui callback in WCF. il succo dell'idea è che il client chiama qualche operazione sul servizio, e il servizio può a sua volta chiamare un metodo sul client (questo è il callback), quindi il client sarà temporaneamente come un server stesso. I metodi in 'ChatService' sono ciò che i client chiamano sul server, ei metodi in' IChatServiceCallback' sono ciò che il servizio richiama sui client. –
@TanielianBarreira guarda il mio aggiornamento. –