我遵循了本教程(至少基于我的 WCF,因为我需要像这样工作): http ://www.eggheadcafe.com/tutorials/wcf/b5ada8df-58c5-492f-b368-457b3a4f137c/notify-client-应用程序-使用-wcf-callbacks.aspx
它在我的电脑上运行良好,但我需要通过互联网使用它。在尝试这样做时,我听说(通过互联网)使用 netTcpBiding 更好。
我将拥有一台服务器,它将了解在线客户端的数量。我想要服务器中我的 IIS 上的 WFC 服务,以及使用它并通知它的 Windows 服务。我需要回调,因为服务器有时必须能够在客户端上执行一些命令。
如果有人可以帮助我,我会非常高兴。
提前致谢,
编辑:
让自己清楚:我只是无法让它在互联网上工作。你们能告诉我如何更改我的配置(Web.config e App.config)以使用 netTcpBinding 并通过互联网工作吗?
再次感谢,
编辑2:
我的 WCFServiceApplication 中的 Web.config 是:
<?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>
我的 WindowsService 中的 App.config 是:
<?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 不起作用...
但我很高兴能够在互联网上运行它......我在 IIS 上发布了 WCFService。链接:
https://www2.tcenter.com.br/monitor/PCWatcherWCFService.svc
或者
http://www2.tcenter.com.br:8080/monitor/PCWatcherWCFService.svc
只需更改配置就足以使其通过互联网工作吗?就像我说的,本地它工作得很好。
我认为只需将客户端上的端点地址更改为它上面的 URL 之一就可以了,但它没有......
您链接的示例在 WPF 上托管服务。我不知道它是否适用于我的场景......
我想我会坚持使用 DualHttpBinding,你不认为端口转发对我的需求有好处,我可以在一个 Intranet 中有很多客户端,并让路由器决定他要发送信息的那个因为这不好对吧?或者有一种方法可以让路由器正确响应通过同一端口连接到我的网络服务器的每台机器?!(随便问问,呵呵)
非常感谢提前,
2012 年 6 月 21 日编辑:
感谢您的阅读。我无法让服务在 LAN 中与 netTcpBinding 一起使用。我做了一个我的场景的模拟样本。它在这里。称为 DualCommunicationTest。
当我开始这篇文章时,我只是想知道如何让这个 cenarion 在互联网上运行。只是。在我在这里发布之前寻找解决方案期间,我读到 netTcpBinding 更好。所以我问了这件事。这只是一个附带问题。
所以......我目前对帖子的需求是:
如何使用我在互联网上开发的示例。
或者
如何使我开发的示例与 netTcpBinding 一起使用,然后能够在 Internet 上使用它。(我很确定Clunky Coder教了我第二部分,关于如何使用 IIS 和其他东西在互联网上发布 net.tcp,非常感谢,但我还不能测试它,因为我不能还没有做 netTcp。)
对不起,如果我不够清楚,我的英语不太好。抱歉,再次感谢,非常感谢。