WCF 웹 서비스에서 반환되는 많은 양의 데이터에 대해 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 시트가 항상 비어 있습니다. 이 점을 이해하도록 도와주세요.
EDITED TO ADDED - URL 재 작성에 사용되는 WCF 사이트의 IHttpModule이 두 번 또는 세 번 호출됩니다. 이것은 aspnet_wp 재활용 때문일 수 있습니까? 이 경우 응용 프로그램 이벤트 로그에 오류가 표시되어야합니다. 하지만 나는 그렇지 않습니다. 이 문제를 도와주세요. 공용 클래스 CustomHttpModule :
여기 내 사용자 지정 HttpModule을 것입니다 IHttpModule { 공공 무효 처분() {}
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 WCFservice이므로 HttpRequest에 대한 시간 제한을 변경해야했습니다.이상한 일은 요청 호출이 단 한 번만 이루어 지지만이 예외가 발생할 때까지 서비스 메소드가 두 번 또는 세 번 실행됩니다. 나는 왜 이것이 일어나고 있는지 이해하지 못한다. KeepAlive를 false로 설정해도 데이터가 반환 될 때까지 요청 호출이 연결 상태를 유지한다고 생각하기 때문에. 이는 대용량 데이터를 내보낼 때만 발생합니다. 해결 방법이있을 수 있지만 해결 방법을 알고 기존 문제를 해결하는 방법을 알고 싶습니다. – Dave
내 질문을 편집했습니다. 전체 데이터를 내보낼 때 IHttpModule의 init은 두 번 또는 세 번 호출됩니다. 데이터가 비교적 적은 경우에는 발생하지 않습니다. 이 aspnet_wp 재활용 수 있습니다. 그렇다면 어떻게 수정해야합니까? – Dave