0

这是一个非常简单的 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/Service

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

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

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

在我的笔记本电脑中如此简单并在本地运行,我认为超时或类似的东西没有问题。

谁能解释一下...我会很感激的

4

1 回答 1

0

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

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

serviceHost.Open();

Console.WriteLine("Host opened");

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

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

有时从别人的代码开始,然后从那里修改它会有所帮助。

于 2012-05-08T18:56:36.533 回答