gpt4 book ai didi

c# - WCF + 单例 + 文件传输 + 多线程

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:02 24 4
gpt4 key购买 nike

我有一个使用 WCF 编写的文件传输服务。它接收客户端发送的文件。客户端反过来使用 FileStream + MessageContract 发送文件。我使用以下属性将 WCF 文件传输服务设为单例

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]

我尝试在客户端中使用多线程。每个线程创建一个 channelfactory + proxy.CreateChannel 的实例,并通过一个不同的文件发送到服务。我在服务端没有任何锁,一次只允许传输一个文件,在客户端也没有。该代码是一种没有状态持久性的直通代码。

我面临的问题是,我没有看到多个线程试图发送多个文件。每次我尝试使用多个线程传输多个文件时,服务类型不接受同一实例的多个文件。这导致文件按顺序传输而不是并行传输。我从客户端感觉到文件已发送,但在服务端,它只是被阻止了。

我尝试使用 ServiceThrottling 属性,但我仍然没有发现任何区别。是我做错了什么,还是这种方法无效?

一个客户端只能通过一个 channel 发送一个文件?许多线程不能将许多文件发送到同一服务吗?有人可以帮帮我吗。

谢谢桑迪普

最佳答案

我不想承认我在这个系列中遇到的愚蠢错误,但我承认,我是多么愚蠢。

  1. 单线程执行的原因。由于我在服务入口的开头立即加了一把锁,因此在其余等待期间只允许一个线程。

  2. 执行几个线程而不是多个线程的原因。由于带宽仅为 2MBPS,而我正尝试传输 10 个文件,每个文件大小为 10MB,因此我假设网络阻塞了。当我尝试处理 10 个文件时,每个 100KB 的多线程都非常有效,我还能够使用 maxConcurrentCalls 控制线程的入口。

干杯,大家,感谢YK1

顺便说一句。如果我错了,请纠正我关于网络带宽是罪魁祸首的假设。

关于c# - WCF + 单例 + 文件传输 + 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com