2011-11-14 87 views
1

我是WCF技术新手,我从我的Silverlight应用程序调用此WCF。WCF超时问题

现在,我有一个在WCF中定义的函数,该函数调用安装在同一台PC上的数据库上的SP。

该SP需要1分钟的时间来执行并返回82000行50列。

我已经在我的应用程序中将wcf超时间隔设置为20分钟。

现在,当我从我的silverlight应用程序调用此WCF函数时,它会在20分钟后给我超时错误。由于SP需要1分钟才能执行,所以我想知道为什么会出现这个超时问题?

什么会导致超时?我能做些什么来避免这种情况?我无法实现分页或任何我需要一次性获取所有这些数据。

请帮帮我吧。我已经附加了我的web.config文件供您参考。

Silverlight的web.config文件

<behaviors> 
     <endpointBehaviors> 
      <behavior name="ExportServiceRestBehavior"> 
       <webHttp /> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
      <behavior name="ExportServiceBehavior"> 
       <serviceMetadata httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
       <serviceThrottling maxConcurrentSessions="2147483647" maxConcurrentInstances="2147483647" /> 
       <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="ExportServiceBehavior" name="DebtorBal.Web.ExportService1"> 
      <endpoint binding="basicHttpBinding" bindingConfiguration="ExportServiceBinding" 
       contract="DevExpress.Xpf.Printing.Service.IExportService" /> 
      <endpoint address="rest" behaviorConfiguration="ExportServiceRestBehavior" 
       binding="webHttpBinding" bindingConfiguration="ExportServiceRestBinding" 
       contract="DevExpress.Xpf.Printing.Service.IExportServiceRest" /> 
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="ExportServiceBinding" maxReceivedMessageSize="50000000" 
       transferMode="Streamed"> 
       <security> 
        <transport realm="" /> 
       </security> 
      </binding> 
      <binding name="myBindingForBigArrays" closeTimeout="00:10:00" 
       openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" 
       maxReceivedMessageSize="2147483647"> 
       <readerQuotas maxDepth="64" maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security> 
        <transport realm="" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
     <webHttpBinding> 
      <binding name="ExportServiceRestBinding" transferMode="Streamed" /> 
     </webHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:49261/LsnMonService.svc" 
      binding="basicHttpBinding" bindingConfiguration="myBindingForBigArrays" 
      contract="ServiceReference1.ILsnMonService" name="BasicHttpBinding_ILsnMonService" /> 
    </client> 
</system.serviceModel> 

WCF配置文件

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" /> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceThrottling maxConcurrentSessions="2147483647" maxConcurrentInstances="2147483647" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 
+0

检查您的服务是否遇到错误 - 未处理的错误可能导致客户端超时。 – Tim

+0

我已查过,没有错误 – user867198

回答

1

这可能比简单。你有没有关闭或处置你的服务?如果不是,那么很可能您的服务连接仍处于打开状态。一旦达到超时限制,就会出错。在从中获取数据后,明确关闭该服务。

+0

我正在关闭服务。事实上,我的第一个服务电话是上面的一个 – user867198

+0

有几个问题:你是否得到了结果?此外,你说这是在一个Silverlight应用程序,所以我假设这个调用是异步的。你什么时候关闭服务客户端?你可以发布调用服务的C#代码吗? –

+0

你好, 对不起,延迟回复 不,我没有得到结果。我用这段代码调用wcf函数 LsnMonWebService objClient = new LsnMonWebService(); objClient.rpt_deb_ContractGrowthAsync(FromDate); objClient.rpt_deb_ContractGrowthCompleted + = new EventHandler (objClient_rpt_deb_ContractGrowthCompleted); – user867198