he seguido este tutorial (al menos en base a mi WCF en esto, coz necesito entonces a trabajar por igual): http://www.eggheadcafe.com/tutorials/wcf/b5ada8df-58c5-492f-b368-457b3a4f137c/notify-client-applications-using-wcf-callbacks.aspx¿Cómo usar un servicio dual de WCF a través de Internet?
Está funcionando muy bien en mi equipo, pero necesito para usarlo en internet. Al tratar de hacer esto, escuché (a través de Internet) que es mejor usar netTcpBiding.
Voy a tener un servidor que conozca la cantidad de clientes en línea. Quería un servicio WFC en mi IIS en el servidor, y un servicio de Windows consumiéndolo y notificándolo. Necesito la devolución de llamada porque el servidor en algún momento debe poder ejecutar algunos comandos en el cliente.
Estaría muy contento si alguien pudiera ayudarme.
Gracias de antemano,
Editar:
siendo claro: yo no podía hacer que funcione en internet. ¿Pueden mostrarme cómo puedo cambiar mis configuraciones (Web.config e App.config) para usar netTcpBinding y trabajar en Internet?
Gracias de nuevo,
Edit 2:
Mi Web.config en mi WCFServiceApplication 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 encantaría poder ejecutar esto por Internet ... Publiqué el WCFService en IIS. Enlaces:
https://www2.tcenter.com.br/monitor/PCWatcherWCFService.svc
O
http://www2.tcenter.com.br:8080/monitor/PCWatcherWCFService.svc
Simplemente cambiar las configuraciones de su suficientes para hacer que funcione a través de Internet? como dije, local funciona bien.
pensé que simplemente cambiando la dirección de punto final en el cliente para una de las URL de encima de ella whould funciona, pero no fue así ...
El ejemplo que haya vinculado aloja el servicio en el WPF. No sé si se aplica a mi cenario ...
Creo que me voy a quedar con el DualHttpBinding, no creo que el reenvío de puertos sea bueno para mis necesidades, puedo tener mucho de clientes en una intranet y que el enrutador decida a cuál le va a enviar información porque no está bien, ¿verdad? o hay una manera de hacer que el enrutador responda correctamente a todas y cada una de las máquinas conectándose a mi servidor web a través del mismo puerto?(Sólo pedir, jejeje)
Gracias mucho por adelantado,
edición el 21/06/2012:
gracias por la lectura. No pude hacer que el servicio funcione con netTcpBinding en LAN. Hice una muestra simulada de mi cenario. Es here. Llamado DualCommunicationTest.
Cuando comencé esta publicación, solo quería saber cómo hacer esta aparición en Internet. Solo eso. Durante mi tiempo buscando una solución antes de publicarla aquí, he leído que netTcpBinding es mejor. Así que pregunté sobre eso. Fue solo una pregunta secundaria.
Así que ... mis necesidades actuales en el puesto son:
Cómo usar the sample i developed en Internet.
O
¿Cómo hacer the sample i developed trabajo con netTcpBinding y luego ser capaz de utilizarlo en Internet. (Estoy bastante seguro de que Clunky Coder me enseñó la segunda parte, sobre cómo publicar un net.tcp en Internet con el IIS y esas cosas, muchas gracias por eso, pero no pude probarlo todavía, porque no pude t hacer un netTcp todavía.)
Lo siento si no he sido lo suficientemente claro, mi inglés no es tan bueno. Sry y gracias de nuevo, mucho.
Lectura agradable de verdad ... bien, ya no sé si voy a netTcp o wsDual, pero, ¿podría ayudarme a hacerlo funcionar? Estoy feliz de poner el ejemplo implementado en el enlace de arriba para trabajar ... –
@TanielianBarreira, Acabo de ver el artículo, parece estar bien escrito, ¿cuál es exactamente el problema? Está implementando un servicio de chat simple por apariencia, hay muchos ejemplos de devoluciones de llamada en WCF. la esencia de la idea es que el cliente llama a alguna operación en el servicio, y el servicio puede a su vez llamar a un método en el cliente (esta es la devolución de llamada), por lo que el cliente será temporalmente como un servidor. Los métodos en 'ChatService' son los que los clientes llaman en el servidor, y los métodos en' IChatServiceCallback' es lo que el servicio invoca en los clientes. –
@TanielianBarreira mira mi actualización. –