我之前没有得到解决方案就问过这个问题,但是由于我已经做了很多测试和调试,并且有了新的信息,我想我会再次提出要求,希望能够深入了解这个问题,为了所有人。
我的域名服务在1分钟后超时。我已经阅读了所有的帖子,并看到了如何创建一个局部类并明确设置超时值,我已经完成了这一点,但我仍然在一分钟后超时。 需要注意的是,在我的部分类/方法中明确设置超时后,我不再收到标准超时错误。相反,我得到了这个:
{System.Net.WebException:远程 服务器返回错误:NotFound。 ---> System.Net.WebException:远程服务器返回错误: 未找到。在 System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult的 asyncResult)at System.Net.Browser.BrowserHttpWebRequest<> c_DisplayClass5.b_4(对象 sendState)at System.Net.Browser.AsyncHelper<> c_DisplayClass2.b_0(对象 sendState)---内部异常结束 堆栈跟踪--- at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,Object state)at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult的 asyncResult)at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult的 结果)}
这是我设置超时值的部分类。我已经调试了这一点,并确保在调用服务之前设置了这些值。我正在使用的服务方法是TestTimeout()。它只会坐下来等到抛出上述异常 - 在通话后一分钟。
public partial class MyDomainContext
{
partial void OnCreated()
{
var proxy = (WebDomainClient<MyDomainContext.IMyDomainServiceContract>)this.DomainClient;
proxy.ChannelFactory.Endpoint.Binding.SendTimeout = new TimeSpan(0, 5, 0);
proxy.ChannelFactory.Endpoint.Binding.ReceiveTimeout = new TimeSpan(0, 5, 0);
proxy.ChannelFactory.Endpoint.Binding.CloseTimeout = new TimeSpan(0, 5, 0);
proxy.ChannelFactory.Endpoint.Binding.OpenTimeout = new TimeSpan(0, 5, 0);
}
}
我在服务器上的测试功能:
[Invoke]
public void TestTimeout()
{
while (true)
{
Thread.Sleep(100); // after one full minute, I get the above exception
}
}
其他什么东西可以超时吗?我在本地开发机器以及运行IIS7的生产服务器上看到了同样的问题。我很困惑这可能是什么。我不认为超时值被忽略,因为我不再获得标准超时异常。我只是觉得还有另一个地方发生超时。
有什么想法吗?
-Scott
答案 0 :(得分:0)
这只是一个想法,你试过让你的asp.net会话超时显式,可能是一分钟......
答案 1 :(得分:0)
尝试将其放在代理的构造函数中:
InnerChannel.OperationTimeout = new TimeSpan(24, 0, 0);