[ASP.net] 此內容中不允許非同步作業。啟動非同步作業的網頁必須將 Async 屬性設定為 true,而且只能在 PreRenderComplete 事件之前啟動非同步作業。

2011/04/01

今天再用ASP.net 寫上傳檔案POST 到一個接收網址..
程式碼如下:


private static void PushData(Stream input, Stream output)
{
byte[] buffer = new byte[4096];
int bytesRead;
 
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
{
output.Write(buffer, 0, bytesRead);
}
}
 
public void UploadFile(string fileName, string newfilename, bool isMerge, Stream data, string dir, string type)
{
try
{
//UriBuilder ub = new UriBuilder("http://127.0.0.1:81/risiv.ashx");
UriBuilder ub = new UriBuilder("http://image.xxxxx.com/risiv.ashx");
if (isMerge)
ub.Query = string.Format("filename={0}&newfilename={1}&merge=true", fileName, newfilename);
else
ub.Query = string.Format("filename={0}&newfilename={1}&merge=false", fileName, newfilename);
 
WebClient c = new WebClient();
 
c.OpenWriteCompleted += (sender, e) =>
{
PushData(data, e.Result);
e.Result.Close();
data.Close();
};
c.OpenWriteAsync(ub.Uri);
}
catch (Exception ex)
{
var root = System.AppDomain.CurrentDomain.BaseDirectory.ToString();
File.WriteAllText(root + "log.txt", ex.Message + "\r\n" + ex.StackTrace);
}
}

但是一直出現…

此內容中不允許非同步作業。啟動非同步作業的網頁必須將 Async 屬性設定為 true,而且只能在 PreRenderComplete 事件之前啟動非同步作業。

   於 System.Web.AspNetSynchronizationContext.OperationStarted()

   於 System.Net.WebClient.OpenWriteAsync(Uri address, String method, Object userToken)

   於 System.Net.WebClient.OpenWriteAsync(Uri address)


原來是要在.aspx 第一行加上一屬性敘述..

Async="true"


使得第一行如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Async="true" Inherits="TestASPXUploader._Default" %>


就可以了…
希望之後有人碰到…
可以節省點時間…

讚一下:


0 意見:

程式 . 生活 . D小調.@2010 | Binary Design: One Winged Angel.