मेरे पास एक कस्टम इंट्रानेट एप्लिकेशन है जिसमें कोई इंटरऑपरेबिलिटी आवश्यकता नहीं है। हम प्रोग्रामिंग रूप से संदेश पास करने के लिए डुप्लेक्स मोड में नेटटीसीपी चैनल का निर्माण करते हैं। हम संदेश एन्कोडिंग को बदलना चाहते थे, लेकिन यह समझने में सक्षम नहीं है कि ऐसा कैसे किया जाए। जाहिर हैनेटटीसीपी के लिए आप प्रोग्रामिंग रूप से डब्लूसीएफ संदेश एन्कोडिंग कैसे बदलते हैं?
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;
}
}
, हम अपने साथ डिफ़ॉल्ट BinaryMessageEncodingBindingElement को बदलने के लिए कोशिश कर रहे हैं:
दृष्टिकोण हम ले लिया है (असफल) LeanTcpBinding नामक एक नया वर्ग में NetTcpBinding विस्तार करने के लिए इस प्रकार किया गया है। यह BinaryMessageEncodingBindingElement की जगह
internal class LeanBinaryMessageEncodingBindingElement : MessageEncodingBindingElement
{
private readonly BinaryMessageEncodingBindingElement _bindingElement;
///
/// Initializes a new instance of the class.
///
public LeanBinaryMessageEncodingBindingElement()
{
_bindingElement = new BinaryMessageEncodingBindingElement();
}
///
/// Initializes a new instance of the class.
///
/// The binding element.
public LeanBinaryMessageEncodingBindingElement(BinaryMessageEncodingBindingElement bindingElement)
{
_bindingElement = bindingElement;
}
///
/// Initializes a new instance of the class.
///
/// The element to be cloned.
/// The binding element.
public LeanBinaryMessageEncodingBindingElement(MessageEncodingBindingElement elementToBeCloned, BinaryMessageEncodingBindingElement bindingElement)
: base(elementToBeCloned)
{
_bindingElement = bindingElement;
}
///
/// When overridden in a derived class, returns a copy of the binding element object.
///
///
/// A object that is a deep clone of the original.
///
public override BindingElement Clone()
{
return new LeanBinaryMessageEncodingBindingElement(
(BinaryMessageEncodingBindingElement)_bindingElement.Clone());
}
///
/// When overridden in a derived class, creates a factory for producing message encoders.
///
///
/// The used to produce message encoders.
///
public override MessageEncoderFactory CreateMessageEncoderFactory()
{
return new LeanBinaryMessageEncoderFactory(_bindingElement.CreateMessageEncoderFactory());
}
///
/// When overridden in a derived class, gets or sets the message version that can be handled by the message encoders produced by the message encoder factory.
///
///
/// The used by the encoders produced by the message encoder factory.
///
public override MessageVersion MessageVersion
{
get { return _bindingElement.MessageVersion; }
set { _bindingElement.MessageVersion = value; }
}
}
जब मैं बाध्यकारी यह होता है मैं वास्तव में क्या लगता है कि यह करना चाहिए उपयोग करने का प्रयास ...: उपयोग सिर्फ पाने के लिए शुरू कर दिया, LeanBinaryMessageEncodingBindingElement BinaryMessageEncodingBindingElement का ही विस्तार इस प्रकार है। हालांकि, मुझे LeanBinaryMessageEncodingBindingElement.CreateMessageEncoderFactory() पर कभी भी कोई कॉल नहीं मिलती है, भले ही संदेशों को चैनल में आदान-प्रदान किया जा रहा हो।
किसी को भी यह ठीक से करने के तरीके पर कोई सुझाव है?
आपने क्या हासिल करने की कोशिश की? स्थायित्व? क्या यह सुधार हुआ? –