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

标签 c# .net wcf nettcpbinding

我有一个由 Windows 服务托管的 WCF 服务。它与网络中的零到多个客户端具有发布/订阅关系。绑定(bind)是 net.TCP。 WCF 服务向客户端提供“订阅”方法,以便客户端可以注册回调处理程序。 WCF 服务定期调用任何当前订阅客户端的回调处理程序中的方法。

接口(interface)定义(带缩写)如下:

    [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

欢迎任何线索或指点。

最佳答案

adkSerenity 和 shambulator,

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

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

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

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

关于c# - netTCPBinding 配置无法传输小型数据 - 套接字连接已中止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940548/

相关文章:

WCF 服务、SSL、消息安全和数字证书

c# - 如果配置在字符串中,是否使用 new ChannelFactory<TChannel>(string)?

c# - Sitecore URL 优化和语言

c# - 删除 Application Insights 后应用程序将无法启动

c# - 如何将一个图形对象复制到另一个

.net - 为什么 SequenceEqual 采用 IEqualityComparer 而不是谓词?

c# - Quartz Scheduler (.Net) - 为什么在运行内置 'RescheduleJob' 方法后立即触发作业?

wcf - WCF的技巧和窍门

c# - 从进程中读取,StreamReader.Peek() 未按预期工作

c# - 使用 GraphDiff 更新多对多关系会导致错误