Мне нужно предоставить функцию экспорта в excel для большого количества данных, возвращаемых веб-службой WCF.
Код для загрузки списка данных выглядит следующим образом:
List<resultSet> r = myObject.ReturnResultSet(myWebRequestUrl); //call to WCF service
myDataList.DataSource = r;
myDataList.DataBind();
Я использую объект Reponse для выполнения работы:
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 всегда будет пустым.Пожалуйста, помогите мне понять это.
EDITED TO ADD - IHttpModule сайта WCF, используемый для перезаписи URL, вызывается дважды или трижды.Может ли это быть из-за перезапуска aspnet_wp?В этом случае я должен увидеть ошибку в журнале событий приложений, верно?Но я неПожалуйста, помогите мне с этим вопросом.
Вот мой пользовательский HttpModule: открытый класс CustomHttpModule: IHttpModule {public void 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 вызывается дважды,Я думаю, именно поэтому я вижу, что истекло время ожидания операции или соединение закрыто.Как мне помешать это сделать дважды?Я создаю только один запрос.