在我们当前的项目中,我们使用Castle在.NET 4应用程序上配置WCF。随着我们来回移动的数据可能会增加,我们希望有某种压缩(从客户端到服务器的Espessially)。在谷歌上搜索这一点带来了两种解决方案:使用内置的.net 45压缩支持(到目前为止,我们无法移动到.net 45,因为我们正式需要支持Windows )或使用微软提供的示例编码器(http://msdn.microsoft.com/en-us/library/ms751458.aspx)。由于自定义编码器选项看起来没有那么糟糕,我想试一试,直到我们可以转移到.net 45。我唯一不知道的是,是否可以使用Castle来配置这个场景。
对此有什么想法吗?
谢谢马库斯
发布于 2013-11-03 09:18:28
在对所涉及的WCF类的源代码进行了一些研究之后,我们找到了一个很好的解决方案来满足我们的需求:我们目前正在使用WSHttpBinding进行绑定。它有一个方法CreateBindingElements,它返回使用的绑定元素的集合,可以被重写。因此,我们只是从WsHttpBinding类派生出来,并在返回它之前将GZipMessageEncoding注入集合。
public class GZipWSHttpBinding : WSHttpBinding
{
public override BindingElementCollection CreateBindingElements()
{
BindingElementCollection bec = base.CreateBindingElements();
int index = bec.Count - 1;
while (index >= 0 && !(bec[index] is MessageEncodingBindingElement))
index--;
if (index >= 0)
{
GZipMessageEncodingBindingElement gZipCompression =
new GZipMessageEncodingBindingElement(bec[index] as MessageEncodingBindingElement);
bec[index] = gZipCompression;
}
return bec;
}
}只剩下使用这个类而不是温莎安装程序中的WsHttpBinding类,并且gzip压缩已经就位。
向马库斯问好
https://stackoverflow.com/questions/19510755
复制相似问题