2012-10-29 3 views
0

webservice를 사용하여 대용량 데이터를 보내야합니다. 데이터 크기는 300MB에서 700MB 사이입니다. 웹 서비스는 SQL 데이터베이스에서 데이터를 생성하고 클라이언트로 전송합니다. 약 20에서 25 개의 테이블을 가진 DataSet의 형태입니다. 나는 예술적인, "How to: Enable a Web Service to Send and Receive Large Amounts of Data" 및 샘플 Microsoft WSE 3.0에서 해결책을 시도했지만, 대부분 "System.OutOfMemoryException"을 제공합니다.webservice를 사용하여 대용량 데이터 보내기

저는 웹 서버가 서버의 메모리에있는 데이터를 버퍼링하는 것으로 생각하고 한계를 넘었습니다.

내가 두 대체, (1) 하나의 DataTable을 보낼 생각하지만, 시간이 하나의 DataTable은 150메가바이트 데이터 (2) HttpWebRequest를 사용하여 서버 및 전송에 파일을 쓰기 (FTP 수 있지만, FTP 서버에 1백메가바이트 주위에있을 수 있습니다 현재 액세스 할 수 없음)

webservice를 사용하여이 문제의 해결 방법을 제안 할 수 있습니까? 데이터 세트가 메모리에 모든 데이터를로드

+0

웹 서비스의 BufferResponse 속성을 사용해 보셨습니까? –

+0

여기 링크입니다 http://msdn.microsoft.com/en-us/library/byxd99hx%28v=vs.80%29.aspx#vbtskusingwebmethodattributeanchorbufferresponse –

+0

예, Microsoft WSE 3.0의 샘플 코드에는 [WebMethod (BufferResponse = false)]. 하지만 여전히 OutOfMemory 예외를주고 있습니다. – par

답변

0

감사합니다. 엄청난 양의 데이터를 전송하는 데는 적합하지 않습니다. DataSets은 일련 화 될 때 많은 추가 정보를 전달합니다.

전송해야 할 테이블의 구조를 알고 있다면 Serializable 개체 집합을 만들어 데이터 배열을 보내면 데이터 탑재량을 크게 줄일 수 있습니다.

DataSet을 사용해야하는 경우 BinaryRemoting을 활성화하는 방법을 살펴보십시오.

BinaryFormatter bf = new BinaryFormatter(); 
myDataSet.RemotingFormat = SerializationFormat.Binary; 
bf.Serialize(s, ResultDataSet); 

같은 방법으로 데이터 페이로드를 감소 후에는 HTTP 서버에 공개적으로 액세스 할 수있는 위치에 파일을 작성하는 가장 좋은 것입니다. http를 통해 호스팅하면 클라이언트가 ftp보다 훨씬 쉽게 파일을 다운로드 할 수 있습니다. 사용자에게 부여 된 적절한 사용 권한을 통해 이러한 http 폴더에 대한 액세스를 제어 할 수 있습니다.

+0

DataReader를 사용하여 변환하려고하지만 웹 서비스를 사용하여 버퍼링하지 않고 데이터를 전달하는 방법을 찾지 못했습니다. 예, 마지막 방법은 파일을 만들고 HTTP를 통해 사용하는 것입니다. – par