Как использовать WCF Dual Service через Интернет?
Я следовал этому руководству (по крайней мере, на этом основывался мой WCF, потому что тогда мне нужно работать одинаково): http://www.eggheadcafe.com/tutorials/wcf/b5ada8df-58c5-492f-b368-457b3a4f137c/notify-client-applications-using-wcf-callbacks.aspx
Он очень хорошо работает на моем компьютере, но мне нужно использовать его через Интернет. При попытке сделать это я услышал (через Интернет), что лучше использовать netTcpBiding.
У меня будет сервер, который будет знать о количестве клиентов в сети. Мне нужен был сервис WFC на моем IIS на сервере, а сервис Windows использовал и уведомлял об этом. Мне нужен обратный вызов, потому что сервер иногда должен выполнять некоторые команды на клиенте.
Я был бы очень рад, если бы кто-нибудь мог мне помочь.
Заранее спасибо,
Edit:
Я проясняю: я просто не мог заставить это работать через Интернет. Ребята, можете ли вы показать мне, как я могу изменить свои конфигурации (Web.config e App.config), чтобы использовать netTcpBinding и работать через Интернет?
Еще раз спасибо,
Edit 2:
Мой Web.config в моем приложении 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>
Мой App.config в моем 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>
Просто изменить его на NetTcpBinding не работает ...
Но я был бы достаточно рад, чтобы иметь возможность запустить это через Интернет ... Я опубликовал WCFService на IIS. Ссылки:
https://www2.tcenter.com.br/monitor/PCWatcherWCFService.svc
ИЛИ ЖЕ
http://www2.tcenter.com.br:8080/monitor/PCWatcherWCFService.svc
Просто измените настройки достаточно, чтобы заставить его работать через Интернет? как я уже сказал, местный он работает просто отлично.
Я думал, что простое изменение адреса конечной точки на клиенте на один из вышеуказанных URL-адресов может сработать, но это не сработало ...
Пример, который вы связали, размещает службу в WPF. Я не знаю, относится ли это к моему кенарио ...
Я думаю, что я буду придерживаться DualHttpBinding, вы не думаете, что переадресация порта хороша для моих нужд, у меня может быть много клиентов в одной интрасети, и маршрутизатор решает, с кем он собирается отправить информацию для этого не подходит? или есть способ заставить маршрутизатор корректно реагировать на каждую машину, подключенную к моему веб-серверу через один и тот же порт ?! (просто спрашиваю, хе-хе)
Заранее большое спасибо,
Edit on 21/06/2012:
Спасибо за чтение. Мне не удалось заставить сервис работать с netTcpBinding в локальной сети. Я сделал пробный образец моего кенарио. Это & APOS; sВот, Называется DualCommunicationTest.
Когда я начал этот пост, я просто хотел узнать, как сделать этот кенарий в интернете. Только то. В течение моего времени поиска решения, прежде чем писать здесь, я читал, что netTcpBinding лучше. Поэтому я спросил об этом. Это был просто побочный вопрос.
Итак ... мои текущие потребности в должности:
Как пользоватьсяобразец, который я разработал в Интернете.
ИЛИ ЖЕ
Как сделатьобразец, который я разработал работать с netTcpBinding и затем иметь возможность использовать его в Интернете. (Я уверен,Неуклюжий кодер научил меня второй части, о том, как публиковать net.tcp в интернете с IIS и прочим, большое спасибо за это, но я пока не смог его протестировать, потому что я еще не смог сделать netTcp.)
Прошу прощения, если я не достаточно ясен, мой английский не очень хорош. спасибо и еще раз большое спасибо.