我目前正在使用进行GZIP压缩的自定义消息编码器。我想将其迁移到逐步解决方案,我使用IIS7的内置(HTTP的“Accept-Encoding:gzip”)压缩:
为了保持基础设施配置的最小变化,我想
这是我打算迁移的其中一项服务配置的片段:
<service name="SomeService" behaviorConfiguration="Common">
<endpoint address="" binding="customBinding" contract="ISomeService" bindingConfiguration="GZipBinding">
<identity>
<dns value="localhost"/>
理论上,我会看到两种方法来完成这项工作:
到目前为止,解决方案 - 如果存在 - 对这两种方式中的任何一种都没有找到。
1:我认为您不能让IIS根据http标头选择端点,IIS将使用soap标头(我假设)做出决定,客户端使用ClientViaBehavior:http://msdn.microsoft.com/en-us/library/aa395210.aspx < / p>
2:在MessageEncoder.WriteMessage中,我认为我无法访问请求HTTP标头,但如果有,则可以轻松决定是否要进行gzip。
任何想法如何解决1.或2.,还是有更好的方法来完成这项工作,使用共享的URL,而不是使用ClientViaBehavior? (如果没有,我猜ClientViaBehavior将是我的后备,至少看起来是可行的)
答案 0 :(得分:0)
虽然最后我完全不同地解决了这个问题,但是使用自定义SOAP头并修改GzipMessageEncoder来查看该头来决定是否压缩,我找到了答案,但实现起来可能有点麻烦。 / p>
无论如何,让我想出一个可能的解决方案的是理解逻辑地址和物理地址之间的区别,如http://msdn.microsoft.com/en-us/library/aa395210.aspx所述。因此,当您更改地址属性时(顺便说一下,您不需要使用上述链接中说明的'listenUri'参数),在您的代码中,您必须将Endpoint对象的'via'参数设置为物理地址,而端点对象的逻辑地址需要与您在端点标记的'address'属性中指定的地址相匹配。