标签: net-tcp

如何以编程方式更改NetTcp的WCF消息编码?

我有一个没有互操作性要求的自定义Intranet应用程序.我们以双工模式编程构造NetTcp通道以传递消息.我们想要更改消息编码,但无法弄清楚如何实现这一点.

我们采取的方法(失败)是将NetTcpBinding扩展为一个名为LeanTcpBinding的新类,如下所示:


internal class LeanTcpBinding : NetTcpBinding
{
    private static readonly ILog _log =
        LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    public override BindingElementCollection CreateBindingElements()
    {
        BindingElementCollection bindingElementCollection = base.CreateBindingElements();
        BindingElement encodingElement = bindingElementCollection.FirstOrDefault(
            bindingElement => bindingElement is BinaryMessageEncodingBindingElement);
        if (encodingElement != null)
        {
            int index = bindingElementCollection.IndexOf(encodingElement);
            bindingElementCollection.RemoveAt(index);
            bindingElementCollection.Insert(index, new LeanBinaryMessageEncodingBindingElement());
        }
        else
        {
            _log.Warn("Encoding not found");
        }

        return bindingElementCollection;
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,我们正在尝试用我们自己的替换默认的BinaryMessageEncodingBindingElement.只是为了开始使用,LeanBinaryMessageEncodingBindingElement是BinaryMessageEncodingBindingElement的扩展,如下所示:


 internal class LeanBinaryMessageEncodingBindingElement : MessageEncodingBindingElement
 {
        private readonly BinaryMessageEncodingBindingElement _bindingElement;

        /// 
        /// Initializes a new instance of the  class.
        /// 
        public LeanBinaryMessageEncodingBindingElement() …
Run Code Online (Sandbox Code Playgroud)

binary wcf encoding net-tcp

8
推荐指数
1
解决办法
7581
查看次数

标签 统计

binary ×1

encoding ×1

net-tcp ×1

wcf ×1