WCF P2P 채팅 프로그램 용 코드를 작성했습니다. 다음과 같이WCF 피어 투 피어 채팅
<services>
<service name="PeerChat.Form1">
<host>
<baseAddresses>
<add baseAddress="net.p2p://PeerChat/" />
</baseAddresses>
</host>
<endpoint name="PeerChatEndPoint" address="" binding="netPeerTcpBinding" bindingConfiguration="BindingUnsecure"
contract="PeerChat.IChatService" />
</service>
</services>
<bindings>
<netPeerTcpBinding>
<binding name="BindingUnsecure">
<resolver mode="Pnrp" />
<security mode="None" />
</binding>
</netPeerTcpBinding>
</bindings>
<client>
<endpoint
name="PeerChatClientEndPoint"
address="net.p2p://PeerChat/"
binding="netPeerTcpBinding"
bindingConfiguration="BindingUnsecure"
contract="PeerChat.IChatService"
/>
</client>
나는 다음 서비스를 호스팅 :
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public partial class Form1 : Form, IChatService
{
IChatService channel;
ServiceHost host = null;
ChannelFactory<IChatService> channelFactory = null;
private void StartService()
{
//Instantiate new ServiceHost
host = new ServiceHost(this);
//Open ServiceHost
host.Open();
//Create a ChannelFactory and load the configuration setting
channelFactory = new ChannelFactory<IChatService>("PeerChatClientEndPoint");
channel = channelFactory.CreateChannel();
//Lets others know that someone new has joined
channel.SendMessage("Hello."+ Environment.NewLine);
foreach (var cloud in Cloud.GetAvailableClouds())
{
textBox2.Text += cloud.Name + Environment.NewLine;
}
}
private void StopService()
{
if (host != null)
{
channel.SendMessage("Bye." + Environment.NewLine);
if (host.State != CommunicationState.Closed)
{
channelFactory.Close();
host.Close();
}
}
}
문제는 내가 프로그램의 동일한 인스턴스가 아닌 다른 인스턴스에 메시지를 보낼 수 있습니다. 즉 인스턴스는 다른 인스턴스의 메시지가 아닌 자체 메시지 만 수신합니다. PNRP를 올바르게 구성해야하는지 확실하지 않은 경우 Windows 7에서 테스트를 마쳤습니다.
그러나 같은 메쉬 주소에서 수신 대기하는 전체 지점이 메시지를 해당 메쉬로 보내야한다고 생각 했습니까? – Ries
사실입니다.하지만 두 프로그램이 서로 다른 두 위치에서 실행되고 있다고 가정합니다. 따라서 컴퓨터 A에서 해당 주소를 수신하고 컴퓨터 B에서 다른 주소를 수신하고 있습니다. WCF에서 두 가지 응용 프로그램이 동일한 컴퓨터의 같은 끝점에서 보내고받는 중입니다. WCF 시스템이 해당 상황에서 해당 테스트 사례에 문제가있는 것으로 의심됩니다 - 따라서 제안. – Streklin
그렇다면 두 인스턴스가 모두 고유 한 메시지를받는 이유는 무엇입니까? – Ries