パブリッシャーインターフェイス
[ServiceContract]
public interface IPublisherInterface
{
[OperationContract(IsOneWay = false)]
void Publish(MessageClass e, string topicName);
}
サブスクライバーインターフェイス
[ServiceContract(CallbackContract = typeof(IPublisherInterface))]
public interface ISubscriberInterface
{
[OperationContract]
void Subscribe(string topicName);
[OperationContract]
void UnSubscribe(string topicName);
}
加入者プログラム
class Program
{
static void Main(string[] args)
{
DuplexChannelFactory<ISubscriberInterface> namedPipeFactory =
new DuplexChannelFactory<ISubscriberInterface>(
new InstanceContext(new PublisherService()),
new NetNamedPipeBinding(),
new EndpointAddress("net.pipe://localhost/Sub"));
ISubscriberInterface pipeProxy = namedPipeFactory.CreateChannel();
pipeProxy.Subscribe("name");
//SubscriberForm f = new SubscriberForm(pipeProxy);
//f.ShowDialog();
}
}
なぜこのメッセージが表示されるのですか?
The message with Action 'http://tempuri.org/ISubscriberInterface/Subscribe' cannot be
processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher.
This may be because of either a contract mismatch (mismatched Actions between sender and
receiver) or a binding/security mismatch between the sender and the receiver. Check that
sender and receiver have the same contract and the same binding (including security
requirements, e.g. Message, Transport, None)."
これは私のホストです
class Program
{
static void Main(string[] args)
{
ServiceHost _publisherServiceHost = new ServiceHost(typeof(PublisherService), new Uri[] { new Uri("net.pipe://localhost/") });
_publisherServiceHost.AddServiceEndpoint(
typeof(IPublisherInterface),
new NetNamedPipeBinding(),
"Pub");
_publisherServiceHost.Open();
ServiceHost _subscriberServiceHost = new ServiceHost(typeof(PublisherService), new Uri[] { new Uri("net.pipe://localhost/") });
_subscriberServiceHost.AddServiceEndpoint(
typeof(IPublisherInterface),
new NetNamedPipeBinding(),
"Sub");
_subscriberServiceHost.Open();
Console.WriteLine("Server is Running.");
Console.ReadLine();
}
}