using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Text;
namespace HelloMesh
{
public static class ProcessMessageActions
{
public const string SayAction = "Say";
}
[ServiceContract(Namespace = "urn:30E9233A-6C5C-47a2-8E90-93D592DA0A00/", CallbackContract = typeof(IProcessMessage))]
interface IProcessMessage
{
[OperationContract(Action="*", IsOneWay = true)]
void ProcessMessage(Message message);
}
partial class HelloProxy : System.ServiceModel.DuplexClientBase<IProcessMessage>, IProcessMessage
{
public HelloProxy(InstanceContext inputInstance, string configurationName) : base(inputInstance, configurationName)
{
base.InnerDuplexChannel.Open();
}
public void ProcessMessage(Message message)
{
base.InnerProxy.ProcessMessage(message);
}
}
class HelloMesh : IProcessMessage
{
public void ProcessMessage(Message message)
{
if (message.Headers.Action == ProcessMessageActions.SayAction)
{
string data = message.GetBody<string>();
Console.WriteLine(data);
}
}
}
class Program
{
static void Main(string[] args)
{
InstanceContext instanceContext = new InstanceContext(new HelloMesh());
using (HelloProxy proxy = new HelloProxy(instanceContext, "HelloEndpoint"))
{
string msg = "";
while (msg != "q")
{
msg = Console.ReadLine();
Message message = Message.CreateMessage(MessageVersion.Soap12WSAddressing10, ProcessMessageActions.SayAction, msg);
proxy.ProcessMessage(message);
}
proxy.Close();
}
}
}
}