Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wcf在lan flie传输中非常慢_Wcf_Performance - Fatal编程技术网

wcf在lan flie传输中非常慢

wcf在lan flie传输中非常慢,wcf,performance,Wcf,Performance,我有一个服务,它有一个从客户端向服务发送文件的方法。我注意到,当我在同一台机器上运行客户机和服务,并且我要发送的文件也在本地机器上时,所有的工作都非常快 然而,我发现客户端和服务在同一台计算机上,而文件在另一台计算机上,因此速度非常慢 如果我将文件从一台计算机复制到另一台计算机,速度很快,因此问题似乎不是带宽 我尝试使用tcp和basicHttp绑定,但结果是一样的 当我尝试发送客户端是否在其他计算机中时,也会出现此问题 谢谢 编辑:如果我打开任务管理器,在运行客户机的计算机的网络选项卡中,我可

我有一个服务,它有一个从客户端向服务发送文件的方法。我注意到,当我在同一台机器上运行客户机和服务,并且我要发送的文件也在本地机器上时,所有的工作都非常快

然而,我发现客户端和服务在同一台计算机上,而文件在另一台计算机上,因此速度非常慢

如果我将文件从一台计算机复制到另一台计算机,速度很快,因此问题似乎不是带宽

我尝试使用tcp和basicHttp绑定,但结果是一样的

当我尝试发送客户端是否在其他计算机中时,也会出现此问题

谢谢


编辑:如果我打开任务管理器,在运行客户机的计算机的网络选项卡中,我可以看到网络的使用率约为0.5%。为什么?

用于传输大文件的WCF不是最佳方法,因为WCF有很多层和开销,这会增加并导致文件传输延迟。此外,您可能还没有编写WCF服务来连续读取字节块并写入响应。您可能正在执行File.ReadAll,然后只返回整个字符串,这将导致服务器上的大量同步读取、大量内存分配,然后将大字符串写入WCF缓冲区,进而写入IIS缓冲区,等等

传输大型文件的最佳方法是使用HttpHandler。您只需使用Response.TransmitFile传输文件,IIS将以最佳方式传输文件。否则,您总是可以一次读取8k,然后写入响应流,并在每次8k写入后调用Flush

如果你因为任何奇怪的原因不能使用HttpHandler,你能给我看一下WCF代码吗

还有一件事。您可能期望的性能在IIS出现时根本不可能实现。首先,如果您直接将文件托管在网站上并通过WebClient.downloadString下载文件,您应该测量IIS传输文件所需的时间


另一件事是,你是如何下载的?通过浏览器?还是通过客户端代码?如果您试图一次性传输整个文件并试图将其保存在字符串中,那么客户端代码也可能是次优的。例如,WebClient.DownloadString将是最糟糕的方法。

发布您的绑定和行为您是否尝试过使用流媒体?