我工作的WCF服务有一个奇怪的问题。突然间,它开始过快关闭连接。我没有改变,也没有改变服务,也没有改变客户。我怀疑运行服务的机器运行速度较慢,但这也开始在我的机器上发生。 为了解决这个问题,我将app.config文件更改为具有以下配置:
<services>
<service behaviorConfiguration="eit" name="Siv.WcfTcpProxy.WcfTcpDataProxyService">
<endpoint address="net.tcp://localhost:51646/WcfTcpProxy" binding="netTcpBinding"
bindingConfiguration="NewBinding0" name="default" contract="Siv.WcfTcpProxy.IWcfTcpDataProxy" />
<host>
<timeouts closeTimeout="00:01:10" />
</host>
</service>
</services>
<binding name="NewBinding0" closeTimeout="00:10:00" openTimeout="00:10:00"
sendTimeout="00:10:00" transactionFlow="true" transferMode="Buffered"
maxBufferSize="655360" maxReceivedMessageSize="655360">
<readerQuotas maxDepth="655360" maxStringContentLength="655360"
maxArrayLength="655360" maxBytesPerRead="655360" maxNameTableCharCount="655360" />
</binding>
</netTcpBinding>
但这仍然没有帮助。 我的合同如下:
// a service contract.
[ServiceContract(Namespace = "http://Siv.WcfTcpProxy",
CallbackContract = typeof(IDataCallback),
SessionMode = SessionMode.Required,
ProtectionLevel = ProtectionLevel.None)]
public interface IWcfTcpDataProxy
{
[OperationContract]
bool PassData(byte[] data, int clientId);
[OperationContract(IsInitiating = true)]
SubscriptionData Subscribe(string appVersion, string appName);
[OperationContract(IsTerminating = true)]
void Unsubscribe(int id);
}
// a service contract callback.
public interface IDataCallback
{
[OperationContract(IsOneWay = true)]
void ResendData(byte[] data);
}
// Service class which implements the service contract.
[ServiceBehavior(IncludeExceptionDetailInFaults = true,
UseSynchronizationContext = false,
InstanceContextMode = InstanceContextMode.PerSession,
ConcurrencyMode = ConcurrencyMode.Multiple)]
//[ErrorBehavior(typeof(CalculatorErrorHandler))]
public class WcfTcpDataProxyService : ServiceBase, IWcfTcpDataProxy
{
...
}
我在WCF跟踪中看到的是,在向Subscribe()发送响应后,连接已关闭。但我仍然可能误解了WCF日志。
欢迎提供任何线索,包括有关高级WCF的优秀阅读材料。
答案 0 :(得分:1)
可能有一些环境原因:
检查系统时钟,正如ShellShock指出的那样。 sku值通常为5分钟。 WCF跟踪可能不会给您任何帮助,您可能需要在服务器端和客户端检查事件查看器。
ShellShock指出的防火墙规则。您或系统管理员是否已经更改了规则,可能会终止/损坏某些“可疑”连接?您需要咨询系统管理员并检查http对话的详细信息。
Windows更新。发生问题的最近几天是否更新了Windows?我有经验,.NET的某些更新引入了问题。
为了隔离可能的环境因素,您最好拥有一些测试环境,并在系统更新/升级中保守一些。例如,您应关闭Windows自动更新并获得通知。何时更改某些计算机设置(例如machine.config或防火墙规则),首先在测试环境或登台环境中执行此操作,然后观察并测试几天。