这是一个非常简单的 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 属性)并确保服务能够连接到客户端。
在我的笔记本电脑中如此简单并在本地运行,我认为超时或类似的东西没有问题。
谁能解释一下...我会很感激的