【发布时间】:2015-09-11 19:18:51
【问题描述】:
我有一个非常简单的 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();
}
【问题讨论】:
-
如果你调用一次它会正常工作还是你也会得到那个错误?另外,有两件事 1) 为什么
nTestCount++在 try/catch 中? 2)++运算符不是线程安全的,不能对静态变量执行此操作。您必须改用Interlocked.Increment(ref nTestCount);或启用某种锁定。请使用调用代码更新您的问题,问题可能出在代码的那一侧,即您如何进行 10 次调用。 -
您是每次通话都使用相同的连接还是创建一个新连接?如果您正在创建一个新连接,您是否要关闭以前的连接?
-
Scott - 我按前 9 次效果很好,但按钮调用客户端代码......但第 10 次失败(大约在几秒钟内)测试代码只是为了提供帮助我弄清楚该服务“停止工作”需要多少次......一旦我弄清楚......整数将与try catch一起被删除。 :-)
-
Mumbo - 我每次都在创建一个新连接...查看更新的问题