如何防止WCF超时?

时间:2015-09-11 19:18:52

标签: c# wcf service

我有一个非常简单的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();
    }

2 个答案:

答案 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();
    }
}