我有一个非常简单的WCF服务:
[ServiceContract]
public interface IEngine
{
#region Test code
// test - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[OperationContract]
string Test();
}
实施如下:
public partial class Engine : IEngine
{
private static int nTestCount = 0;
string IEngine.Test()
{
try
{
nTestCount++;
}
catch (Exception)
{
}
return "Service OK " + nTestCount.ToString();
}
}
当我调用测试服务方法10次,大约10秒钟......我收到此错误:
请求频道在00:01:00之后等待回复时超时。增加传递给Request的调用的超时值或增加Binding上的SendTimeout值。分配给此操作的时间可能是较长超时的一部分。
(我试图输入我的web.config文件,但它没有显示在这里) (有关发布内容的帮助将不胜感激)
更新1:
以下是调用服务的客户端代码:
private void btn_Test_Click(object sender, EventArgs e)
{
ServiceReference1.EngineClient eng = new EngineClient();
textBox1.Text = eng.Test();
}
答案 0 :(得分:2)
当您完成连接时,您没有关闭连接,这导致服务器绑定连接,直到垃圾收集器收集您的对象。服务器可以处理的默认最大打开会话数为.net 3.5及更早版本(it was raised to 100 * ProcessorCount in .NET 4)。
处理发动机,它应该可以正常工作。
private void btn_Test_Click(object sender, EventArgs e)
{
using(ServiceReference1.EngineClient eng = new EngineClient())
{
textBox1.Text = eng.Test();
}
}
答案 1 :(得分:0)
每次使用后,您都没有关闭客户端连接,这在一段时间后会导致服务用完可用连接。一旦服务达到其最大打开连接,新连接将超时,等待连接清除。
你需要通过调用Dispose()或使用块包装它们来关闭你的连接
private void btn_Test_Click(object sender, EventArgs e)
{
using (ServiceReference1.EngineClient eng = new EngineClient())
{
textBox1.Text = eng.Test();
}
}