classCompressSoapExtension : SoapExtension
{//旧流///privateStream _originStream=null;//新流///privateStream _newStream=null;publicoverrideStream ChainStream(Stream stream)
{this._originStream=stream;this._newStream=newMemoryStream();returnthis._newStream;
}publicoverrideobjectGetInitializer(Type serviceType)
{returnnull;
}publicoverrideobjectGetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAttribute attribute)
{returnnull;
}publicoverridevoidInitialize(objectinitializer)
{
}publicoverridevoidProcessMessage(SoapMessage message)
{switch(message.Stage)
{caseSoapMessageStage.BeforeSerialize:
{
SoapClientMessage msg=messageasSoapClientMessage;
msg.ContentEncoding="gzip";
}break;caseSoapMessageStage.AfterSerialize:
{this._newStream.Position=0;this._newStream.CopyTo(this._originStream);
}break;caseSoapMessageStage.BeforeDeserialize:
{//判断是gzip头那么就进行解压缩 这样就对原来的程序没有影响了if(string.Compare(message.ContentEncoding,"gzip",true)==0)
{using(GZipStream zs=newGZipStream(this._originStream, CompressionMode.Decompress))
{
zs.CopyTo(this._newStream);
}
}else{this._originStream.CopyTo(this._newStream);
}this._newStream.Position=0;
}break;
}
}