Tip: Peer Channel and custom Message contracts
Scenario: Say, we have defined a custom Message contract to use in our Application like so:
public enum SendMessageType
{
Send,
Ack,
Resend,
}
[MessageContract(IsWrapped=false)]
public class TestMessage
{
[MessageHeader]
public SendMessageType Type;
[MessageHeader]
public int MessageId;
}
[ServiceContract(CallbackContract = typeof(IMessage))]
public interface IMessage
{
[OperationContract(IsOneWay = true)]
void SendMessage(TestMessage message);
}
Symptom: Messages are not being received by the peers and the client channels are being torn down due to FaultException when sending messages.
Tip: Make sure that the TestMessage Message Contract above actually has an explicit constructor defined as well. So the modified TestMessage Message contract looks like:
[MessageContract(IsWrapped=false)]
public class TestMessage
{
[MessageHeader]
public SendMessageType Type;
[MessageHeader]
public int MessageId;
public TestMessage()
{
}
}
-Shalini.