我可能会在这里遗漏一些东西,但从我对WCF的了解和使用ChannelFactory,我相信我正确地创建,关闭和处理连接。
我创建了一个在我的PC上运行的简单服务,只需返回一个字符串。然后,我创建了一个客户端应用程序,通过创建通道,调用服务方法,关闭通道然后处理它来发出嘎嘎声。通常,当循环达到14,000到16,000之间时,会发生错误,说“由于系统缺少足够的缓冲区空间或因为队列已满而无法执行对套接字的操作”。这让我觉得我没有处理/清理我的连接但是从我读过的内容中我相信我正在做的一切都是正确的。我也尝试在每次迭代中处理和创建一个新的通道工厂,这也有同样的问题(而且速度明显变慢)。
非常感谢任何帮助。感谢。
// Interface for the service
[ServiceContract]
public interface ITestService
{
[OperationContract, XmlSerializerFormat]
string HelloWorld(int counter);
}
//Implementation of the service
public class TestService : ITestService
{
public string HelloWorld(int counter)
{
return string.Format("{0,6:0}: Hello New World - {1}", counter, Guid.NewGuid().ToString());
}
}
// Console Application
static void Main(string[] args)
{
int count = Convert.ToInt32(args[0]);
System.Console.WriteLine("Generating " + args[0] + " calls");
using (ChannelFactory<ITestService> sharedChannelFactory = new ChannelFactory<ITestService>("BasicHttpBinding_ITestService"))
{
for (int i = 0; i < count; i++)
{
ITestService svc = null;
svc = sharedChannelFactory.CreateChannel();
string response = svc.HelloWorld(i);
((IClientChannel)svc).Close();
((IClientChannel)svc).Dispose();
System.Console.WriteLine(string.Format("{0}", response));
}
}
}