Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/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
C# ASMX文件上载_C#_.net_Web Services_Asmx - Fatal编程技术网

C# ASMX文件上载

C# ASMX文件上载,c#,.net,web-services,asmx,C#,.net,Web Services,Asmx,有没有一种方法可以使用ASMXWeb服务(没有WCF,不要问为什么:)将文件从本地文件系统上载到服务器中的文件夹 UPD 另外,文件大小可以是2-10 GB,当然: [WebMethod] public void Upload(byte[] contents, string filename) { var appData = Server.MapPath("~/App_Data"); var file = Path.Combine(appData, Path.GetFileNam

有没有一种方法可以使用ASMXWeb服务(没有WCF,不要问为什么:)将文件从本地文件系统上载到服务器中的文件夹

UPD

另外,文件大小可以是2-10 GB,当然:

[WebMethod]
public void Upload(byte[] contents, string filename)
{
    var appData = Server.MapPath("~/App_Data");
    var file = Path.Combine(appData, Path.GetFileName(filename));
    File.WriteAllBytes(file, contents);
}
然后公开服务,从WSDL生成客户机代理,调用,标准内容

--

更新:


我现在看到你关于处理大文件的更新。内置在WCF中的已针对处理此类情况进行了优化。

对于非常大的文件,将其发送到web服务的唯一有效方法是使用。MTOM是唯一的,你已经排除了。使用老式的.asmxweb服务实现这一点的唯一方法是@Darin Dimitrov给出的答案。使用该解决方案,您将不得不承受文件进行base64编码的成本(带宽增加33%)

我们也有同样的要求,基本上是使用客户端的标准
FileUpload
控件通过HTTP POST上传文件。 最后,我们在ASMXWeb服务项目中添加了一个ASPX页面(毕竟它只是一个web项目)——这允许我们上传到,即
http://foo/bar/Upload.aspx
当web服务处于
http://foo/bar/baz.asmx
。这使功能保留在web服务中,即使它使用的是单独的web页面


这可能符合您的要求,也可能不符合您的要求,@Darins方法也可以作为一种解决方案,但您必须在客户端进行修改,这对我们来说不是一个选项。

在开发免费工具将大文件上传到服务器时,我还使用.NET 2.0和web服务

为了使应用程序对非常大的文件更具容错性,我决定不上传一个大的
byte[]
数组,而是进行“chuncked”上传

也就是说,对于上传一个1 MB的文件,我会调用我的upload SOAP函数20次,每次调用都会传递一个50 KB的
字节[]
数组,并将其再次集中到服务器上

我还数了数包裹,当其中一个掉下来时,我又试着上传了好几次

这使得上传在UI中更具容错性和响应能力


如果您感兴趣,.

您可以尝试将文件转换为Base64,并将其作为字符串传递给服务,然后再转换回字节数组


@scartag,是的,这就是我的意思。@2xMax,对于大文件,您会遇到问题:-)您需要增加web.config中的最大请求大小,对于真正大的文件,您会遇到更大的问题。有一些先进的协议,比如MTOM和流媒体,但是有了ASMX,你就必须实现它们。IIRC有一些用于ASMX的SOAP扩展可以与MTOM一起使用,但在这个阶段,它们应该是非常不受欢迎的,我甚至不会去想它。。我想是的:)@2xMax如果您具有所需的连接速度/带宽,您可以传输大文件。。。怕它超时…我想了想。但我也认为这可能会导致大量的bug:)是的,它花了相当长的时间才成为一个圆形的东西。