我有一个由Windows服务托管的WCF服务。它对网络中的零到多个客户端具有发布/订阅关系。绑定是net.TCP。 WCF服务提供了一个"订阅"客户端的方法,以便客户端可以注册回调处理程序。 WCF服务定期调用任何当前订阅的客户端的回调处理程序中的方法。
接口定义(带缩写)如下:
[OperationContract(IsOneWay = false)]
void ReturnInitialData(
InitialData initialData,
CraneState recentState,
VerticalCraneState recentVerticalCraneState,
ThresholdState recentThresholdState,
StationaryStatusFlagsState recentStationaryStatusFlagState,
LightsState recentLights,
BarrierRiskState recentBarrierRiskState
);
当服务调用大约42000字节数据的ReturnInitialData()时,它可以正常工作。当服务使用大约70000字节的数据调用它时,它会抛出以下异常:
The socket connection was aborted. This could be caused by an
error processing your message or a receive timeout being
exceeded by the remote host, or an underlying
network resource issue. Local socket timeout was '00:10:00'.
这是netTcpBinding配置:
General
CloseTimeout 00:00:20
HostNameComparisonMode StrongWildcard
ListenBacklog 0
MaxBufferPoolSize 524288
MaxBufferSize 2147483647
MaxConnections 0
MaxReceivedMessageSize 2147483647
OpenTimeout 00:01:00
PortSharingEnabled False
ReceiveTimeout 00:10:00
SendTimeout 00:10:00
TransactionFlow False
TransactionProtocol Ole Transactions
TransferMode Buffered
ReaderQuotas Properties
MaxArrayLength 0
MaxBytesPerRead 0
MaxDepth 0
MaxNameTableCharCount 0
MaxStringContentLength 0
ReliableSession Properties
Enabled False
InactivityTimeout 00:10:00
Ordered True
欢迎任何线索或指示。
答案 0 :(得分:4)
adkSerenity和shambulator,
谢谢。我发现了这个问题。结果是缓冲区大小。我很确定它不是超时,因为最短的超时设置为一分钟,我可以在30秒内重现错误。
我一直在避免使用WCF跟踪和消息记录,因为它非常令人生畏。阅读太多,时间太少了。 ; - }
当我用观察者查看它时生成输出时,它可能也是火星人。在雾中研究了一段时间之后,我终于得到了这样一种印象:失去沟通不是服务的错。然后灯泡继续,我检查了客户端的配置文件。果然,MaxBufferSize设置为65535,有效地切断了70000字节的消息。
再次感谢你指出我正确的方向。
答案 1 :(得分:2)
您可能希望启用WCF跟踪和消息记录,这将允许您监视/查看与WCF服务之间的通信,并希望隔离问题(基于提供的错误消息,可能是超时问题) 。)
以下链接提供了一个很好的概述:
http://msdn.microsoft.com/en-us/library/ms733025.aspx
此致