2013-05-05 60 views
0

我试图通过以太网电缆与两台PC进行通信。我已经进入设置并告诉它使用两个特定的IP地址。我已经关闭了两台电脑的防火墙,并设法从一台电脑ping到另一台电脑。当我尝试使用下面的代码时,虽然它不工作。关于在指定地址收听任何内容。有任何想法吗?使用WCF http通过LAN进行通信

// SERVER

using System; 
using System.ServiceModel; 

namespace WCFServer 
{ 
    [ServiceContract] 
    public interface IStringReverser 
    { 
    [OperationContract] 
    string ReverseString(string value); 
    } 

    public class StringReverser : IStringReverser 
    { 
    public string ReverseString(string value) 
    { 
     char[] retVal = value.ToCharArray(); 
     int idx = 0; 
     for (int i = value.Length - 1; i >= 0; i--) 
     retVal[idx++] = value[i]; 

     return new string(retVal); 
    } 
    } 

    class Program 
    { 
    static void Main(string[] args) 
    { 
     using (ServiceHost host = new ServiceHost(
     typeof(StringReverser), 
     new Uri[]{ 
      new Uri("http://192.168.10.10") 
     })) 
     { 

     host.AddServiceEndpoint(typeof(IStringReverser), 
      new BasicHttpBinding(), 
      "Reverse"); 

     host.Open(); 

     Console.WriteLine("Service is available. " + 
      "Press <ENTER> to exit."); 
     Console.ReadLine(); 

     host.Close(); 
     } 
    } 
    } 
} 

// CLIENT

using System; 
using System.ServiceModel; 
using System.ServiceModel.Channels; 

namespace WCFClient 
{ 
    [ServiceContract] 
    public interface IStringReverser 
    { 
    [OperationContract] 
    string ReverseString(string value); 
    } 

    class Program 
    { 
    static void Main(string[] args) 
    { 
     ChannelFactory<IStringReverser> httpFactory = 
     new ChannelFactory<IStringReverser>(
      new BasicHttpBinding(), 
      new EndpointAddress(
      "http://192.168.10.9")); 


     IStringReverser httpProxy = 
     httpFactory.CreateChannel(); 

     while (true) 
     { 
     string str = Console.ReadLine(); 
     Console.WriteLine("http: " + 
      httpProxy.ReverseString(str)); 
     } 
    } 
    } 
} 

回答

2

您的服务侦听的地址是http://192.168.10.10/Reverse(URI你给加端点名称你给了),你应该将客户端连接到这个端点而不是http://192.168.10.9

+0

对不起,我对这些东西有点绿色+我现在不能检查,因为我不在我的电脑。所以在客户端代码中,我需要指定另一台计算机的服务器的IP地址。在服务器代码中,我需要将与实际运行代码的计算机相同的IP地址?那么我将如何让服务器首先调用客户端,或者客户端是否必须首先调用服务器?非常感谢您的帮助。 – 2013-05-05 15:55:20

+1

正确。 “Reverse”是你在服务器端给你的端点的名称:'host.AddServiceEndpoint(typeof(IStringReverser),new BasicHttpBinding(),“Reverse”);'。注意最后一个参数。这附加到您的IP,所以如果您多次调用AddServiceEndpoint,您可以为每个IP使用多个端点。 – nvoigt 2013-05-05 16:03:56

+0

非常感谢您的帮助。有一点我仍然有点模糊。服务器只是在特定的端口上监听,直到客户端向该特定端口发送信息。服务器如何知道将信息发回给哪个地址?服务器是否有可能首先调用客户端。我读了一些关于必须使用wsDualHttpBinding的内容。感谢你的宝贵时间。 – 2013-05-05 17:09:07