내가 웹 서비스에 보낼 필요가 5백킬로바이트 크기 xml 파일을 가지고, 그래서 난이 데이터를 압축하고 좀 들었
웹 서비스로 보내려면 뭔가를 base24Encoding ... 사람이 내가 GZipStream을 사용하는 경우 가정 내가 어떻게 사전에 웹 서비스에
감사 파일을 보낼 수있는이
에 더 많은 빛을 던질 수
내가 웹 서비스에 보낼 필요가 5백킬로바이트 크기 xml 파일을 가지고, 그래서 난이 데이터를 압축하고 좀 들었
웹 서비스로 보내려면 뭔가를 base24Encoding ... 사람이 내가 GZipStream을 사용하는 경우 가정 내가 어떻게 사전에 웹 서비스에
감사 파일을 보낼 수있는이
에 더 많은 빛을 던질 수
다음과 같은 내용 (첫 번째 부분은 우리가 작업하기 위해 임의의 xml을 작성합니다). 웹 서비스는 이상적으로 byte [] 인수를 취해 MTF를 기반으로 WSE3 또는 MCF를 사용하는 경우 MTOM을 사용 가능하게하여 기본 64 오버 헤드를 줄입니다. 그냥 byte[]
으로 게시 한 다음 다른 쪽 끝에서 압축을 취소하십시오.
if (File.Exists("my.xml")) File.Delete("my.xml");
using (XmlWriter xmlFile = XmlWriter.Create("my.xml")) {
Random rand = new Random();
xmlFile.WriteStartElement("xml");
for (int i = 0; i < 1000; i++) {
xmlFile.WriteElementString("add", rand.Next().ToString());
}
xmlFile.WriteEndElement();
xmlFile.Close();
}
// now we have some xml!
using (MemoryStream ms = new MemoryStream()) {
int origBytes = 0;
using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
using (FileStream file = File.OpenRead("my.xml")) {
byte[] buffer = new byte[2048];
int bytes;
while ((bytes = file.Read(buffer, 0, buffer.Length)) > 0) {
zip.Write(buffer, 0, bytes);
origBytes += bytes;
}
}
byte[] blob = ms.ToArray();
string asBase64 = Convert.ToBase64String(blob);
Console.WriteLine("Original: " + origBytes);
Console.WriteLine("Raw: " + blob.Length);
Console.WriteLine("Base64: " + asBase64.Length);
}
다른 직렬화 형식을 고려하십시오. 훨씬 작고 (결과적으로 gzip 등의 이점을 얻지 못하는) 조밀 한 바이너리 프로토콜이 있습니다. 예를 들어, protobuf-net을 통해 직렬화하면 매우 효율적인 크기가됩니다. 그러나 이는 임의의 xml 데이터가 아니라 객체 모델에만 적용됩니다.
그것에 대해 좋은 기사는 여기에 있습니다 :
http://www.ibm.com/developerworks/xml/library/x-tipcomp.html
웹 서비스는 압축을 표현하는 바이트 [] 매개 변수를 수용해야하는 것이 시나리오를 처리하는 가장 좋은 방법 XML. Base64 인코딩은 자동으로 수행됩니다. 압축률을 높이려면 MTOM encoding을 사용할 수 있습니다. 이렇게하면 와이어를 통해 전송하기 위해 바이트 배열을 문자열로 변환하고 압축률이 느슨한 위치에서 Base64 단계를 수행하지 않아도됩니다. 당신이 선택할 수있는 다음과 같은 한
:
경우 BinaryFormatter = 새로운 ArrayList를
ArrayList를 itemsToSerialize();
itemsToSerialize.Add ("john"); itemsToSerialize.Add ("smith");
스트림 스트림 = 새 FileStream (@ "MyApplicationData.dat", System.IO.FileMode.Create); IFormatter formatter = new BinaryFormatter(); formatter.Serialize (stream, itemsToSerialize);
stream.Close();
당신은 IIS에서 호스팅되는 WCF 서비스 * HttpBinding WCF netTcpBinding이
당신이 사용할 수있는 사용하고 IIS를 통해 WCF의 gzip 압축을 설정하는 과정을 안내합니다 this blog을 수행 할 수
및 요청한 다음 압축을 풉니 다.
새 StreamReader (새 GZipStream (webResponse.GetResponseStream(), CompressionMode.Decompress));
경우 BinaryFormatter는 일반적으로 웹 서비스에 대한 매우 가난한 선택 –
전 | 옵 가고 싶습니다 감사 Andrejev ... 당신은, 당신이 3를 선택할 것 기대했다 샘플 코드 – Sathish
좀 도와주십시오 수 있습니다 난이 생각하기 때문에 할 가장 적합한 일입니다. –
감사합니다. Gravell ... 역방향 압축 코드도 사용할 수 있습니까? – Sathish
프레임 워크 2.0을 사용하여 Dotnet에 대해 처음 접했기 때문에 최선의 방법을 제안 할 수 있습니까? xml은 데이터 집합에서 생성되며 데이터 집합의 원본은 ExcelBytes (OLEDB를 사용하여 읽음)가됩니다. – Sathish
@ Sathish - 매우 비슷한 방법으로 압축을 푸십시오. (GZipStream unzip = new GZipStream (incoming, CompressionMode.Decompress)) { // 모두 읽는 중 ... }을 사용하여 (MemoryStream incoming = new MemoryStream (blob)) –