6

この単純なWCF検出の例は単一のマシンで機能しますが、クライアントとサーバーがファイアウォールのない同じサブネット内の別々のマシンで実行されている場合は機能しません。私は何が欠けていますか?

using System;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.ServiceModel;
using System.ServiceModel.Discovery;

namespace WCFDiscovery
{
   class Program
   {
      static void Main(string[] args)
      {
         try { if (args.Length > 0) StartClient(); else StartServer(); }
         catch (Exception ex) { Console.WriteLine(ex); }
         finally { Console.WriteLine("press enter to quit..."); Console.ReadLine(); }
      }

      private static void StartServer()
      {
         var ipAddress = Dns.GetHostAddresses(Dns.GetHostName()).First(ip => ip.AddressFamily == AddressFamily.InterNetwork);
         var address = new Uri(string.Format("net.tcp://{0}:3702", ipAddress));
         var host = new ServiceHost(typeof(Service), address);
         host.AddServiceEndpoint(typeof(IService), new NetTcpBinding(), address);
         host.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
         host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
         host.Open();
         Console.WriteLine("Started on {0}", address);
      }

      private static void StartClient()
      {
         var dc = new DiscoveryClient(new UdpDiscoveryEndpoint());
         Console.WriteLine("Searching for service...");
         var findResponse = dc.Find(new FindCriteria(typeof(IService)));
         var response = ChannelFactory<IService>.CreateChannel(new NetTcpBinding(), findResponse.Endpoints[0].Address).Add(1, 2);
         Console.WriteLine("Service response: {0}", response);
      }
   }

   [ServiceContract] interface IService { [OperationContract] int Add(int x, int y); }

   class Service : IService { public int Add(int x, int y) { return x + y; } }
}
4

2 に答える 2

2

2つの異なるマシン(ノートブック(Win7)とタワーPC(Win8)、. NET FW 4.5、同じWiFiネットワーク)でコードを実行しましたが、次の例外が発生しました。

A remote side security requirement was not fulfilled during authentication. Try increasing the ProtectionLevel and/or ImpersonationLevel.

これは、サービスセキュリティが指定されていないためであり、エンドポイントが見つかりました。したがって、他の回答の人は正しいです-これはネットワークの問題であり、コードを修正しても修正できません。問題のもう1つの考えられる原因は、UDPブロードキャストを許可しないネットワークスイッチである可能性があることを付け加えておきます。

于 2013-01-03T18:12:46.117 に答える
1

明確にするために、Windowsファイアウォールもオフになっていますか?

また、他のコンピューターがサーバーとの通信に使用するアドレスにサーバーをバインドしていることを確認してください。

Localhostまたは127.0.0.1は、マルチキャスト検出パケットが到着する外部(ホスト)のアドレス可能なIPへの接続を取得しない可能性があります。

WindowsファイアウォールをオフにするMSDNの手順

于 2012-12-27T18:37:02.983 に答える