这是一个非常简单的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)并确保该服务能够连接到 客户端。
在我的笔记本电脑中使用本地操作,我认为没有超时或类似的问题。
任何人都可以解释一下......我会很感激
答案 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
有时从别人的代码开始是有帮助的,并从那里修改它。