2

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

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

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

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

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

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

谢谢桑迪普

4

2 回答 2

2

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

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

  2. 执行几个线程而不是多个线程的原因。由于带宽只有 2MBPS,而且我尝试传输 10 个文件,每个文件 10MB,我假设网络阻塞。当我尝试使用 10 个文件时,每个 100KB 多线程的工作就像一个魅力,我也能够使用 maxConcurrentCalls 控制线程的入口。

大家干杯,谢谢YK1

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

于 2013-05-21T05:53:54.500 回答
0

尝试ServicePointManager.DefaultConnectionLimit在客户端中将属性设置为大于 2 的值。

于 2013-05-20T09:59:42.290 回答