WCF可扩展性MessageEncoder实现

时间:2013-04-03 09:57:44

标签: c# wcf events delegates wcf-extensions

如何将ReadMessage和WriteMessage映射到一个可以控制类库中的消息编码的事件?

public class CustomMessageEncoder:MessageEncoder
{
    public delegate Message ReadMessage_dlg(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType);
    public delegate Message ReadMessage_dlg(System.IO.Stream stream, int maxSizeOfHeaders, string contentType);
    public static event ReadMessage_dlg OnReadMessage;
    public delegate ArraySegment<byte> WriteMessage_dlg(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset);
    public delegate void WriteMessage_dlg(Message message, System.IO.Stream stream);
    public static event WriteMessage_dlg OnWriteMessage;
    .
    .
    .

    public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
    {
        throw new NotImplementedException();
    }

    public override Message ReadMessage(System.IO.Stream stream, int maxSizeOfHeaders, string contentType)
    {
        throw new NotImplementedException();
    }

    public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
    {
        throw new NotImplementedException();
    }

    public override void WriteMessage(Message message, System.IO.Stream stream)
    {
        throw new NotImplementedException();
    }

}

我只想要StrongType(没有动态/参数对象[])onReadMessage和onWriteMessage事件 有没有办法超载可以接受拖曳方法的委托/事件?

1 个答案:

答案 0 :(得分:0)

我认为这是我们的要求。你为什么不尝试这样做的标准方式? 例如在您的库外代码寄存器中的某处:

 OnWriteMessage += new WriteMessage_dlg(myMessage, myStream);

并在每个特定的MessageEncoder读/写方法中调用delegate.invoke?

 public override void WriteMessage(Message wcfMessage, Stream stream) {
   OnWriteMessage.Invoke();
 }