2013-04-03 105 views
0

如何将ReadMessage和WriteMessage映射到可以控制类库外的消息编码的事件?WCF扩展性MessageEncoder实现

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(没有动态/ params对象[])onReadMessage和onWriteMessage事件 有什么办法超载代表/事件,可以接受拖梅索德?

回答

0

这就是我的需求,我想。你为什么不尝试这样做的标准方式? 例如在你外的库代码寄存器的地方:

OnWriteMessage += new WriteMessage_dlg(myMessage, myStream); 

,并在每个特定MessageEncoder,具体读/写方法调用delegate.invoke?

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