【问题标题】:Uploading file to web service via post通过 post 将文件上传到 Web 服务
【发布时间】:2014-06-04 18:11:00
【问题描述】:

我是 C# 新手,上传文件到 Web 服务器时遇到问题。

我在生成代码时使用了this 作为模板。

try
{
    using (WebClient client = new WebClient()) {
        client.Headers.Add("Content-Type", "binary/octet-stream");
        ans = client.UploadFile(remoteSiteFileURL, "POST", @"D:\test.txt");
    }

    string responseAsString = Encoding.Default.GetString(ans);
    MessageBox.Show("Done" + responseAsString);
}

当我调用此代码时,我什么也得不到,只是在某个时间(可能是一分钟)'The operation has time out' 后出现异常。

文件 test.txt 小于 1kb(实际上是几个字节)。 Web 服务(站点)工作正常,我轻松上传了 500kb 的数据。

我在测试上传时使用了下一个 html 表单:

<h1>Upload file form</h1>
    <form enctype="multipart/form-data" action="upload.php" method="POST">
    <input type="hidden" name="MAX_FILE_SIZE" value="2097152" />
        Send file<input name="userfile" type="file" />
    <input type="submit" value="Send File" />
    </form>

没有授权,在upload.php中设置了会话控制。

更新1: 1)当我运行此代码时,我无法关闭我的应用程序。它挂它。 2)我关闭了防火墙,这没有帮助。

更新2: 我在“upload.php”放置了一个记录器,它在被调用时写入文件。所以,我的日志中没有任何内容,即它没有被调用(我不确定。可能会在传输完整文件时调用它(脚本))。

问题可能是什么?我错过了什么吗?

【问题讨论】:

    标签: c#


    【解决方案1】:

    This sample 不先设置标题。那还有运气吗?

    【讨论】:

    【解决方案2】:

    解决方案是增加这个超时值。但是 WebClient 类没有这样的属性或方法。所以在上传数据之前,需要用自己的类将WebClient包裹起来,设置基类的超时时间。 此外,您可以尝试 WebClient 的异步方法。 WebClient.UploadFileAsync

    【讨论】:

    • 但是为什么呢?我有不到 1kb 的文件,所以传输速度应该很快。
    • 请检查,可以访问尝试上传的网站吗?
    • 当然(我通过 System.Net.WebRequest.Create(...) 进行了调用)到远程站点。我recetly,在我的服务器上本地完成。并且文件传输工作(!?!?),所以有3种可能的解释:1)远程服务器配置错误。(但我的brouser表单传输工作)2)我的代码没有发送任何东西(可能是标题或其他东西)或3 ) 我对这个客户有意见(不知道是哪一个以及为什么)。
    • 第一是有道理的。代码流中没有问题,无论如何您都应该使用异步操作,例如网络编码。
    • 问题出在客户端。我在wireshark [网络流量分析器] 中没有看到传出请求。在我与 webclient 分开的代码中,我之前做了一些 webrequest,所以我发现如果停止这样做,上传就可以了!我不知道真正的问题(缺少端口或组件数量限制或其他),但我在代码中的某些地方添加了 close() 参数并运行!
    猜你喜欢
    • 2011-09-23
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多