给出以下代码;
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请求来解决这个问题,以确认文件实际上已经完成了,但是如果可能的话,我更喜欢更健壮的东西。
答案 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中的最大工作簿大小相同的编号
单击“确定”。