public Message ProcessMessage(Message message)
{
Message replyMsg = null;
switch (message.Headers.To.AbsoluteUri)
{
case "urn:MyServer":
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName =
ServiceSecurityContext.Current.PrimaryIdentity.Name;
Binding b = CreateCustomBinding();
BindingParameterCollection bpc = new BindingParameterCollection();
bpc.Add(credentials);
IChannelFactory<IDuplexSessionChannel> fac = b.BuildChannelFactory<IDuplexSessionChannel>(bpc);
fac.Open();
IDuplexSessionChannel channel = fac.CreateChannel(epa);
channel.Open();
//save message id for correlation
object msgID = message.Headers.MessageId;
Message strippedMsg = Message.CreateMessage(MessageVersion.Default,
message.Headers.Action, message.GetReaderAtBodyContents());
//add message id.
strippedMsg.Headers.MessageId = (System.Xml.UniqueId)msgID;
channel.Send(strippedMsg);
Message msg = channel.Receive();
replyMsg = Message.CreateMessage(MessageVersion.Default,
msg.Headers.Action, msg.GetReaderAtBodyContents());
//stuff the messageid back in the reply message
replyMsg.Headers.MessageId = (System.Xml.UniqueId)msgID;
channel.Close();
fac.Close();
break;
}
return replyMsg;
}
"The beginning of knowledge is the discovery of something we do not understand."
- Frank Herbert