netTCPBinding配置无法传输小型数据 - 套接字连接已中止

时间:2013-11-12 21:45:55

标签: c# .net wcf nettcpbinding

我有一个由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

欢迎任何线索或指示。

2 个答案:

答案 0 :(得分:4)

adkSerenity和shambulator,

谢谢。我发现了这个问题。结果是缓冲区大小。我很确定它不是超时,因为最短的超时设置为一分钟,我可以在30秒内重现错误。

我一直在避免使用WCF跟踪和消息记录,因为它非常令人生畏。阅读太多,时间太少了。 ; - }

当我用观察者查看它时生成输出时,它可能也是火星人。在雾中研究了一段时间之后,我终于得到了这样一种印象:失去沟通不是服务的错。然后灯泡继续,我检查了客户端的配置文件。果然,MaxBufferSize设置为65535,有效地切断了70000字节的消息。

再次感谢你指出我正确的方向。

答案 1 :(得分:2)

您可能希望启用WCF跟踪和消息记录,这将允许您监视/查看与WCF服务之间的通信,并希望隔离问题(基于提供的错误消息,可能是超时问题) 。)

以下链接提供了一个很好的概述:
http://msdn.microsoft.com/en-us/library/ms733025.aspx

此致