【问题标题】:Using WCF http to communicate over a LAN使用 WCF http 通过 LAN 进行通信
【发布时间】:2013-05-05 13:01:36
【问题描述】:

我正在尝试通过以太网电缆与两台电脑通信。我已经进入设置并告诉它使用两个特定的 IP 地址。我已经关闭了两台电脑上的防火墙,并设法从一台电脑ping到另一台电脑。当我尝试使用以下代码时,它不起作用。在指定的地址什么都没有听。有什么想法吗?

//服务器

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();
      }
    }
  }
}

//客户

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));
      }
    }
  }
}

【问题讨论】:

    标签: c# wcf http c#-4.0 distributed-computing


    【解决方案1】:

    您的服务正在侦听的地址是 http://192.168.10.10/Reverse(您提供的 Uri 加上您提供的端点名称),您应该将您的客户端连接到此端点而不是 http://192.168.10.9

    【讨论】:

    • 对不起,当涉及到这些事情时,我有点绿了 + 我现在无法检查,因为我不在我的电脑上。所以在客户端代码中,我需要指定另一台计算机的 IP 地址,即服务器。在服务器代码中,我需要输入与实际运行代码的计算机相同的 IP 地址吗?那么我将如何允许服务器首先调用客户端,或者客户端总是必须先调用服务器?非常感谢您迄今为止的帮助。
    • 正确。 “反向”是您在服务器中为端点指定的名称:host.AddServiceEndpoint(typeof(IStringReverser), new BasicHttpBinding(), "Reverse");。注意最后一个参数。这是附加到您的 IP 的,因此如果您多次调用 AddServiceEndpoint,每个 IP 可以有多个端点。
    • 非常感谢您解决这个问题。有一件事我仍然有点模糊。服务器只是在特定端口上侦听,直到客户端将信息发送到该特定端口。服务器如何知道将信息发送回哪个地址?服务器是否可以先调用客户端。我读了一些关于必须使用 wsDualHttpBinding 的内容。再次感谢您的宝贵时间。
    • 向客户端发送响应由主机自动处理,您无需跟踪请求的来源。您不能先调用客户端...这会颠倒客户端和服务器的角色。如果您愿意,您可以拥有两台服务器。
    • 你有时间在聊天室里回答几个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多