我有一个我在Silverlight项目中连接的WCF服务。服务需要做的任务需要一分钟(这很好),但我收到一个错误。我通过代理(当您添加服务引用时由dev studio创建)与它进行通信
The HTTP request to 'http://localhost/ImporterService.svc' has exceeded the allotted timeout. The time allotted to this operation may have been a portion of a longer timeout.
(其中ImporterService是我的服务)
我已经阅读了过去3天关于增加以下内容的所有帖子。
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
openTimeout="00:10:00"
closeTimeout="00:10:00"
没有任何效果,1分钟后仍然超时!
好的,所以在生成的ServiceReferences.ClientConfig文件中,我已在以下位置添加了值
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ImporterService" maxBufferSize="2147483647"
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
openTimeout="00:10:00"
closeTimeout="00:10:00"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
....
此超时似乎发生在客户端(例如,我可以通过在服务代码中添加1分钟的睡眠来实现)
问题1 所以,在我的情况下,我只需要改变客户端。
无论如何都在web.config中 在web.config中,我添加了块
inside the existing <basicHttpBinding> as shown below
><basicHttpBinding>
><binding name="downloadBinding" maxReceivedMessageSize="2000000" maxBufferSize="2000000">
><readerQuotas maxArrayLength="2000000" maxStringContentLength="2000000" />
></binding>
>
><binding name="BasicHttpBinding_IImporterService" maxBufferSize="2147483647"
>receiveTimeout="00:10:00"
>sendTimeout="00:10:00"
>openTimeout="00:10:00"
>closeTimeout="00:10:00"
>maxReceivedMessageSize="2147483647">
><security mode="None" />
></binding>
>
></basicHttpBinding>
></bindings>
注意我使用名称BasicHttpBinding_IImporterService(其他帖子使用了随机名称,它们在客户端和服务器上甚至不相同!例如。
I also have <httpRuntime executionTimeout set to a huge value.
超时不会增加。现在还是1分钟。
所以,大问题
1. What an I doing wrong, am I putting these settings in the wrong place?
2. Is it just client side I need to do
3. Perhap it can be done in code if these config settings don't work
例如,在我使用它的地方,我使用
进行实例化
ImporterServiceClient importerService = new ImporterServiceClient("*", new >EndpointAddress(ServicePath));
我知道还有很多其他帖子,但是,大多数只是包含属性,而不是确切地设置它们,所以显然我的位置错了?
非常感谢任何帮助。我想做的就是增加一个超时(在代码,配置,任何实际工作的地方)!
提前感谢任何可以提供帮助的人 皮特
答案 0 :(得分:1)
在web.config中无需添加任何超时数据。 将超时设置添加到SL应用程序。 当您将ServiceRefferences添加到项目中时,VisualStudio必须生成文件
ServiceReferences.ClientConfig
我有这个配置
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IEventsService" closeTimeout="01:59:00"
receiveTimeout="01:59:00" sendTimeout="01:59:00" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://mySite/MyService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IEventsService"
contract="EventService.IEventsService" name="BasicHttpBinding_IEventsService" />
</client>
</system.serviceModel>
您可以根据需要设置超时参数。 希望这有帮助。
答案 1 :(得分:0)
@Std_Net,非常感谢您的回复。我发布这篇文章后不久,我设法让它发挥作用(虽然我已经挣扎了几天!)
以上就是我添加超时设置的原因,由于某种原因,设置只是没有抓住我。我找到了一个exampole,其中这些是在代码中设置的,当我尝试时,它们终于出现了。
你是对的,我不需要在服务器站点(web.config)上做任何事情,只有客户端。
只是让任何其他人都需要知道这一点(即像我这样的WCF新手)这里至少对我有用......
private readonly ImporterServiceClient m_importerService; ...
m_importerService = new ImporterServiceClient("*", new EndpointAddress(ServicePath));
const int timeoutMinutes = 15;
m_importerService.Endpoint.Binding.OpenTimeout = TimeSpan.FromMinutes(timeoutMinutes);
m_importerService.Endpoint.Binding.SendTimeout = TimeSpan.FromMinutes(timeoutMinutes);