我有一台服务器,它从多个系统接收数据,将它们添加到数据库并使用最新接收的数据更新另一个应用程序(客户端)。此客户端(均在同一台计算机上运行)以有组织的形式显示数据并对其进行一些处理。而且,它可以使用服务器在数据库中执行查询。因此它使用服务器中的函数来获取历史数据。
对于此通信,我使用的是WCF,服务器在.config中声明如下:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="ServiceName">
<endpoint binding="netTcpBinding" contract="IServiceName">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:5050/msservice"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
客户端使用以下配置:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IService" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:10:00" sendTimeout="00:02:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxConnections="10" maxBufferSize="2147483647" maxBufferPoolSize="2147483647">
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
<security mode="Transport">
<transport clientCredentialType="Windows" protectionLevel="EncryptAndSign"/>
<message clientCredentialType="Windows"/>
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint address="net.tcp://localhost:5050/msservice" binding="netTcpBinding" bindingConfiguration="NetTcpBinding_IService" contract="Server.IService" name="NetTcpBinding_IService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
</client>
</system.serviceModel>
当客户端创建服务(连接到服务器)时,它使用名为Subscribe的服务功能,其中包括服务器连接客户端列表中的客户端。当新数据到达时,它会在所有客户端中引发一个事件。
然而,在客户端一些不活动之后(因为它不会定期向服务器发送消息,即使相反的情况发生频率非常高),它也会进入故障状态。发生这种情况时,服务器函数的每个客户端调用都会引发异常。
我希望,无论是在服务器端还是在客户端,每当通道关闭时自动重新连接,以保证客户端仍然从客户端接收消息,并且客户端的函数调用由服务器执行
非常感谢您的帮助!
答案 0 :(得分:0)
负载平衡器在1分钟后关闭空闲连接。因此,如果你想保持连接存在,那么应该总是进行一些沟通
1)第一个选择是每分钟调用一次操作。
2)如果无法做到,那么