我需要爲從WCF Web服務返回的大量數據提供對excel功能的導出。將數據從WCF服務導出到excel
加載DataList控件的代碼如下:
List<resultSet> r = myObject.ReturnResultSet(myWebRequestUrl); //call to WCF service
myDataList.DataSource = r;
myDataList.DataBind();
我使用的效應初探對象做的工作:
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=MyExcel.xls");
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter tw = new HtmlTextWriter(sw);
myDataList.RenderControl(tw);
Response.Write(sb.ToString());
Response.End();
的問題是,WCF服務超時的大量的數據(大約5000行),結果集爲空。當我調試服務時,我可以看到保存/打開Excel表單的窗口出現在服務返回結果之前,因此Excel表單始終爲空。請幫我弄清楚這一點。
編輯添加 - 用於重寫URL的WCF站點的IHttpModule被調用兩次或三次。這可能是因爲aspnet_wp回收?在這種情況下,我應該看到我的應用程序事件日誌中的錯誤,對吧?但我不知道。請幫我解決這個問題。
這裏是我的自定義的HttpModule: 公共類CustomHttpModule:IHttpModule的{ 公共 無效的Dispose(){}
public void Init(HttpApplication appln)
{
appln.AuthorizeRequest+= delegate
{
HttpContext tcontext= HttpContext.Current;
string path = tcontext.Request.AppRelativeCurrentExecutionFilePath;
int i = path.IndexOf('/', 2);
if (i > 0)
{
string svc = path.Substring(0, i) + ".svc";
string fu = path.Substring(i, path.Length - i);
tcontext.RewritePath(svc, fu, tcontext.Request.QueryString.ToString(), false);
}
};
}
}
我看到appln.AuthorizeRequest被調用了兩次。我認爲這就是爲什麼我看到操作超時或連接關閉異常。我如何阻止它做兩次。我只創建一個請求。
我得到「底層連接已關閉」異常。這是一個REST WCF服務,所以我不得不改變HttpRequest的時間。有一點奇怪的是請求調用只做了一次,但服務方法被擊中兩次或三次,直到出現此異常。我不明白爲什麼會發生這種情況。我甚至將KeepAlive設置爲false,因爲我認爲請求調用是爲了保持連接處於活動狀態,直到數據返回。這僅在導出大量數據時發生。可能有解決方法,但我想知道如何解決現有問題,而不是開始解決問題。 – Dave 2010-06-15 18:11:34
我編輯了我的問題。我發現在導出整個數據時,IHttpModule的init會被調用兩次或三次。當數據相對較小時不會發生這種情況。這可能是aspnet_wp回收。如果是這樣,我該如何解決它? – Dave 2010-06-16 17:43:45