Winforms Web服务上载和进度

Winforms Web服务上载和进度,winforms,web-services,multithreading,Winforms,Web Services,Multithreading,请帮我解决这个问题,我不确定正确或最好的方法是什么。基本上,我有一个采用字节流的Web服务,使c#winform应用程序能够将文件上传到Web服务 我需要的是winform在后台一次上载一个文件(使用基本的多线程,它尝试一次上载所有文件)。我还需要在那里放一个进度条 我该怎么做?有什么想法吗?我觉得应该是相当直截了当的。我认为应用程序应该为第一个文件启动一个新线程,等待它完成,然后处理该线程,为下一个文件创建一个新线程,依此类推 这完全取决于您在客户端访问web服务时使用的技术 如果该技术允许定

请帮我解决这个问题,我不确定正确或最好的方法是什么。基本上,我有一个采用字节流的Web服务,使c#winform应用程序能够将文件上传到Web服务

我需要的是winform在后台一次上载一个文件(使用基本的多线程,它尝试一次上载所有文件)。我还需要在那里放一个进度条


我该怎么做?有什么想法吗?我觉得应该是相当直截了当的。我认为应用程序应该为第一个文件启动一个新线程,等待它完成,然后处理该线程,为下一个文件创建一个新线程,依此类推

这完全取决于您在客户端访问web服务时使用的技术

如果该技术允许定制客户机代理,使您能够拦截消息传输(WCF允许这样做,我记不起旧的web服务引用有多大作用),那么您应该能够添加钩子来查看字节的处理/发送时间


根据bookstorecowboy关于在.NET中使用旧的“web引用”功能的评论,我认为它生成了从类派生的代理

在这种情况下,我建议创建一个从SoapHttpClientProtocol类派生的自定义类,重写。在本例中,假设您返回一个XmlWriter,给定作为SoapClientMessage参数的属性传递的流

您还将创建一个从Stream派生的自定义类,该类接受一个Stream实例并将所有调用转发给该实例

唯一的区别是,在Write方法中,您将触发一个事件,指示写入了多少字节

然后,您将获得在传递给GetWritePerformMessage的SoapClientMessage上公开的流,并将其包装到自定义流实现中。您还可以在此处连接事件处理程序

使用该流,您将创建XmlWriter并返回它


然后,对于您的代理,您将使用这个派生自SoapHttpClientProtocol的新类,并使代理从中派生。

对于ASP.NET 2.0 web服务(“旧web服务”),您可以添加web服务扩展来更改和扩展其行为。 您还可以添加自定义Http模块。 它允许您访问流级别


请看,

谢谢Casper,好的,它使用老式的.NET代理版本,并使用WINFORM从那里调用c#中的Web服务。它创建Web服务的一个版本,然后通过文件发送。有些文件的长度约为20mb。此外,它会向上发送未知数量的文件,因为它基本上是备份用户创建的目录,因此它首先扫描目录,然后依次ping每个文件。