2013-04-03 82 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(); 
}