我創建了一個自定義綁定(主要用於最初的診斷目的),通過編程方式更改WCF消息的編碼方式。這裏是什麼樣子:如何以編程方式配置綁定以強制WCF消息的JSON編碼?
public class ConfigurableNetTcpBinding : Binding
{
public enum MessageEncoding
{
Text,
Binary,
MTOM,
ByteStream,
JSON,
};
private TcpTransportBindingElement transport;
private MessageEncodingBindingElement encoding;
public ConfigurableNetTcpBinding(MessageEncoding encoding = MessageEncoding.Binary, bool enableMessageCounters = false)
: base()
{
EnableMessageCounters = enableMessageCounters;
Encoding = encoding;
this.Initialize();
}
public override BindingElementCollection CreateBindingElements()
{
BindingElementCollection elements = new BindingElementCollection();
elements.Add(this.encoding);
elements.Add(this.transport);
return elements;
}
public override string Scheme
{
get { return this.transport.Scheme; }
}
public long MaxReceivedMessageSize
{
get { return transport.MaxReceivedMessageSize; }
set { transport.MaxReceivedMessageSize = value; }
}
public TransferMode TransferMode
{
get { return transport.TransferMode; }
set { transport.TransferMode = value; }
}
public MessageEncoding Encoding { get; private set; }
public bool EnableMessageCounters { get; private set; }
private void Initialize()
{
MessageEncodingBindingElement messageEncoder;
switch (Encoding)
{
default:
case MessageEncoding.Text:
messageEncoder = new TextMessageEncodingBindingElement();
break;
case MessageEncoding.Binary:
messageEncoder = new BinaryMessageEncodingBindingElement();
break;
case MessageEncoding.MTOM:
messageEncoder = new MtomMessageEncodingBindingElement();
break;
case MessageEncoding.ByteStream:
messageEncoder = new ByteStreamMessageEncodingBindingElement();
break;
case MessageEncoding.JSON:
WebMessageEncodingBindingElement webEncoder = new WebMessageEncodingBindingElement();
// Um... what goes here to to configure the webEncoder to serialize with JSON vs POX
messageEncoder = webEncoder;
break;
}
transport = new TcpTransportBindingElement();
encoding = EnableMessageCounters ? new CountingEncoderBindingElement(messageEncoder) : messageEncoder;
}
}
忽略CountingEncoderBindingElement
......它只是對線計數字節的包裝。基本上,我想弄清楚如何配置WebMessageEncodingBindingElement,以便它始終將消息序列化爲JSON。我錯過了什麼?所有MSDN Docs都說這是用於JSON編碼的編碼元素,文檔說使用Encoding
構造函數來設置該模式,但Encoding
沒有用於JSON的任何選項......它都是關於Unicode的。
有趣。不應該有關於消息編碼格式的任何特定於http的東西......至少我不希望:)我會繼續挖掘,如果有人不打我,它一定會發布解決方案。 – 2010-09-21 13:09:10