3

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

欢迎任何线索或指示。

4

2 回答 2

4

adkSerenity and shambulator,

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

我一直在避免 WCF 跟踪和消息记录,因为它太吓人了。读的太多,时间太少。;-}

当我生成输出并用查看器查看它时,它也可能是火星人。迷迷糊糊地研究了一会儿,我终于得到的印象是失去通信不是服务的错。然后灯泡亮了,我检查了客户端的配置文件。果然,MaxBufferSize 设置为 65535,有效切断了 70000 字节的消息。

再次感谢您为我指明正确的方向。

于 2013-11-13T14:55:36.400 回答
2

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

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

问候,

于 2013-11-12T22:59:36.093 回答