简单的WCF示例失败

时间:2012-05-08 18:53:40

标签: wcf

这是一个非常简单的WCF示例,我找不到失败的原因。

这是在WCF类库项目中定义的

这是定义合同的界面:

<ServiceContract()> _
Public Interface IService1

    <OperationContract()> _
    Function GetData(ByVal value As Integer) As String

    <OperationContract()> _
    Function Ping() As Boolean

End Interface

这是界面的实现:

<ServiceBehavior(IncludeExceptionDetailInFaults:=True)> _
Public Class Service1
    Implements IService1

    Public Function GetData(ByVal value As Integer) As String Implements IService1.GetData
        Return String.Format("You entered: {0}", value)
    End Function

    Public Function Ping() As Boolean Implements IService1.Ping
        Return True
    End Function
End Class

然后,在名为Server的控制台应用程序中,我添加了对上面定义的服务的服务引用。我按如下方式创建服务主机:

static void Main(string[] args)
{
   try
   {
      ServiceHost serviceHost = new ServiceHost(typeof(ServiceReference.Service1Client));
      NetTcpBinding netTcpBinding = new NetTcpBinding();

      serviceHost.AddServiceEndpoint(typeof(ServiceReference.IService1), netTcpBinding, "net.tcp://localhost:9007/Service/");

      Console.WriteLine("Service started at net.tcp://localhost:9700/Service");

      serviceHost.Open();

      Console.WriteLine("Host opened");
      Console.ReadLine();
   }
   catch (Exception ex)
   {
      Console.WriteLine(ex.Message);
      Console.Read();
   }
   finally
   {
       Console.WriteLine("Service closed");
   }
}

然后,在另一个名为Client的控制台应用程序中,我添加了对服务的服务引用,并创建了一个代理客户端,如下所示:

static void Main(string[] args)
{
   NetTcpBinding netTcpBinding = new NetTcpBinding();

   try
   {
       var serviceClient = new Client.ServiceReference1.Service1Client(netTcpBinding, new EndpointAddress("net.tcp://localhost:9007/Service/"));
       serviceClient.InnerChannel.OperationTimeout = TimeSpan.FromMinutes(10);

       Console.WriteLine("Pinging server");               

       if (serviceClient.Ping())
       {
          Console.WriteLine("Getting Data");

          var result = serviceClient.GetData(1);

          Console.WriteLine("Result is " + result);
       }
       else
       {
          Console.WriteLine("Server is not responding");
       }
   }
   catch (Exception ex)
   {
       Console.WriteLine(ex.Message);
   }

   Console.ReadLine();
}

当我运行Server.exe时,它显示服务从net.tcp启动:// localhost:9700 /服务

当我运行Client.exe时,它会显示 Ping服务器

然后我在WCF类库项目中得到一个我无法调试的错误,最后在Client.exe中说出了

的异常
  

此请求操作发送到net.tcp:// localhost:9007 / Service / did   在配置的超时(00:01:00)内没有收到回复。该   分配给这个操作的时间可能是更长的一部分   超时。这可能是因为服务仍在处理   操作或因为服务无法发送回复消息。   请考虑增加操作超时(通过强制转换   通道/代理到IContextChannel并设置OperationTimeout   property)并确保该服务能够连接到   客户端。

在我的笔记本电脑中使用本地操作,我认为没有超时或类似的问题。

任何人都可以解释一下......我会很感激

1 个答案:

答案 0 :(得分:0)

您的代码在打开服务器之前打印一个静态字符串,然后在打开服务器后打印一个字符串:

Console.WriteLine("Service started at net.tcp://localhost:9700/Service");

serviceHost.Open();

Console.WriteLine("Host opened");

你说你看到了第一条消息,但你从未说过你看过第二条消息。在没有看到该消息的情况下,我认为您调用serviceHost.Open();

可能有问题

以下是在WCF中使用NetTcpBingings的示例 http://www.dotnetfunda.com/articles/article704-using-nettcpbinding-in-wcf-.aspx

有时从别人的代码开始是有帮助的,并从那里修改它。