神秘=>管道读取错误:管道已结束。 (109,0x6d) - c#

我知道这里有上百万个关于此异常的帖子,但我对这里不了解。
我有一个极端的简单示例管道服务:

[ServiceContract]
public interface ISRARiskExport
{ 
[OperationContract(IsOneWay = true)]
void RiskExport(long sraid, long revID, string JobID);
}

当我调用它时,一切都很好,但是当两个客户端同时调用它时,它将引发此异常。
服务器直接设置一个新线程并返回到客户端。

public void RiskExport(long sraid, long revID, string JobID)
{
ThreadStarter starter = new ThreadStarter(new ThreadStartWithParameter(RunExportJob), new SRAInfo() { sraid = sraid, revID = revID, JobID = JobID });
Thread t = new Thread(new System.Threading.ThreadStart(starter.ThreadStartEntry));
t.IsBackground = true;
t.Start();
}

因此,这不会造成超时问题,因为从保护区到服务器再到返回,只需要1秒钟。特别是当我从单元测试中在for循环中同步调用它时

string JobID = "";
for (int i = 0; i < 100; i++)
{
string baseAddress = "net.pipe://localhost/SRADocumentService";
ChannelFactory<ISRARiskExport> factory = new ChannelFactory<ISRARiskExport>(new NetNamedPipeBinding(NetNamedPipeSecurityMode.None), new EndpointAddress(baseAddress));
ISRARiskExport svc = factory.CreateChannel();
JobID = Guid.NewGuid().ToString();
svc.RiskExport(sraid, revID, JobID);
}

我都准备激活WCF跟踪。在这里,我可以看到每个调用都引发了异常。 “详细信息”面板根本没有帮助我,因为它两次向我显示“异常” =>
从管道读取错误:管道已结束。 (109,0x6d)。

神秘=>管道读取错误:管道已结束。 (109,0x6d) - c#

使用不同的堆栈跟踪=>

神秘=>管道读取错误:管道已结束。 (109,0x6d) - c#

神秘=>管道读取错误:管道已结束。 (109,0x6d) - c#

我还在Debugview中看到,异常是在调用返回到客户端之后很久才出现的。
我的问题是:

为什么服务即使抛出此异常也仍按预期运行
我如何摆脱该异常,因为它们都进入了日志文件,而我却不愿抓住它。

THX迈克尔

参考方案

我获得了具有非常相似的跟踪数据的相同序列异常,并且将绑定更改为以下内容后,异常停止了。注意我不知道这些更改的含义是什么,因此请谨慎使用。

    public Binding GetBinding()
    {
        var binding = new NetNamedPipeBinding
        {
            OpenTimeout = TimeSpan.FromMinutes(15),
            SendTimeout = TimeSpan.FromMinutes(15),
            CloseTimeout = TimeSpan.FromMinutes(15),
            MaxConnections = 200,
            MaxBufferSize = int.MaxValue,
            MaxReceivedMessageSize = int.MaxValue,
            MaxBufferPoolSize = int.MaxValue,
            TransactionFlow = false,
            TransactionProtocol = TransactionProtocol.WSAtomicTransaction11,
            TransferMode = TransferMode.StreamedRequest,
            HostNameComparisonMode = HostNameComparisonMode.WeakWildcard
        };
        binding.Security.Transport.ProtectionLevel = ProtectionLevel.None;
        return binding;
    }

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

>> Python中的运算符 - python

>>运算符做什么?例如,以下操作10 >> 1 = 5有什么作用? 参考方案 它是右移运算符,将所有位“右移”一次。二进制10是1010移到右边变成0101这是5

Python 3运算符>>打印到文件 - python

我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak&#…

PS之渐变映射 - 首先打开一张图。执行“图像>调整>渐变

首先打开一张图。 执行“图像>调整>渐变映射”命令或“图层>新建调整图层>渐变映射”命令,即会弹出“渐变映射”对话框。 A01:为渐变映射的预设,用鼠标单击渐变方块,就可以应用该渐变映射,还可以通过预设右上方的小三角和载入、存储按钮来读取和保存自定义的预设A02:渐变类型有两种,一种“实底”,另一种“杂色”,看到的是实底的渐变,“杂色…

Java中的<<或>>>是什么意思? - java

This question already has answers here: Closed 7 years ago. Possible Duplicate: What does >> and >>> mean in Java?我在一些Java代码中遇到了一些陌生的符号,尽管代码可以正确编译和运行,但对于括号在此代码中的作用却感…