即使上传请求超时,文件也会显示在目标中

时间:2013-11-13 20:35:44

标签: c# sharepoint httpwebrequest

给出以下代码;

public static void Upload(Uri target, Stream content)
{
    var request = (HttpWebRequest)WebRequest.Create(target);
    request.UseDefaultCredentials = true;
    request.Method = WebRequestMethods.Http.Put;
    request.ContentType = "application/octet-stream";

    using (Stream requestStream = request.GetRequestStream())
    {
        content.CopyTo(requestStream);
    }

    using (var response = (HttpWebResponse)request.GetResponse())
    {

    }
}

我看到的结果是我在特定情况下没有预料到的。

我的上传请求的目标是SharePoint系统,如果我上传的文件足够大,导致请求超时,则会抛出WebException(正如预期的那样),并显示消息“操作定时去”。到目前为止一切都很好。

奇怪的是,如果我重新运行相同的代码(即使是在一个新的进程中),那么在它再次失败并再次超时之后,该文件实际上会出现在目标中。它似乎没有被破坏或部分上传,因为我可以下载它,它似乎完好无损。

在创建我的请求时,是否还有其他一些内容可以防止这种情况发生?我知道我可以通过在超时的情况下执行HEAD请求来解决这个问题,以确认文件实际上已经完成了,但是如果可能的话,我更喜欢更健壮的东西。

2 个答案:

答案 0 :(得分:1)

也许您可以尝试修改Web配置文件。

<httpRuntime executionTimeout="1200" maxRequestLength="2097151" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />

这是我的网站web配置httpRuntime。你可以修改执行超时。

希望这有帮助。

答案 1 :(得分:0)

最好的方法 - 使用Sharepoint网页界面。

在管理中心的“应用程序管理”中,单击“管理Web应用程序” 选择应用程序(例如,SharePoint-80) 在“Web应用程序”功能区上,单击“常规设置”按钮上的向下箭头 单击“常规设置” 滚动到最大上传大小。
将该属性设置为与Excel Services中的最大工作簿大小相同的编号 单击“确定”。