增加C#类库(DLL)调用wcf服务超时

Posted

技术标签:

【中文标题】增加C#类库(DLL)调用wcf服务超时【英文标题】:Increase C# class library(DLL) Timeout calling wcf service 【发布时间】:2018-04-06 03:04:52 【问题描述】:

我有一个调用 WCF 服务的类库。完成这项服务大约需要 3 分钟。我正在使用 Windows 窗体,并在 httpRuntime 元素的 App.Config 中添加了 executionTimeout。尽管如此,它不会等到它完成交易。如何延长通话等待时间?

我在我的 Windows 窗体应用程序的 App.Config 中添加了以下代码

    <system.web>
   <compilation debug="false"/>
    <httpRuntime executionTimeout="360" />  
  </system.web>

我点击下面的按钮调用我的服务。

Registration rObj = new Registration("http://x.x.x.x:1010/Service.svc");
RegInfo sObj = rObj.ValidateRegistration("1234");
MessageBox.Show(sObj.bIsRegistered.ToString());

但是当请求响应时间有点长时,上面会调用 TimesOut。

【问题讨论】:

您是否在客户端设置了超时?我看不到。 我也为客户设置了 6 分钟 【参考方案1】:

您需要在 WCF 应用程序和 Windows 窗体应用程序上设置超时

1) WCF 应用程序:请在 web.config 中添加以下更改

=> 第一次更改

<bindings>
   <basicHttpBinding>
        <binding name="BasicHttpsBindingConfig" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"
         receiveTimeout="00:10:00" sendTimeout="00:10:00">
    <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
        </binding>
   </basicHttpBinding>
</bindings>

=> 第二个变化:增加 web.config 中的超时时间

<configuration>
  <system.web>
  <httpRuntime executionTimeout="600"/>
  </system.web>
</configuration>

2) Windows 窗体应用示例:

public static void Main()  
          
            Uri baseAddress = new Uri("http://localhost/MyServer/MyService");  

            try  
              
                ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService));  

                WSHttpBinding binding = new WSHttpBinding();  
                binding.OpenTimeout = new TimeSpan(0, 10, 0);  
                binding.CloseTimeout = new TimeSpan(0, 10, 0);  
                binding.SendTimeout = new TimeSpan(0, 10, 0);  
                binding.ReceiveTimeout = new TimeSpan(0, 10, 0);  

                serviceHost.AddServiceEndpoint("ICalculator", binding, baseAddress);  
                serviceHost.Open();  

                // The service can now be accessed.  
                Console.WriteLine("The service is ready.");  
                Console.WriteLine("Press <ENTER> to terminate service.");  
                Console.WriteLine();  
                Console.ReadLine();  

              
            catch (CommunicationException ex)  
              
                // Handle exception ...  
              
        

【讨论】:

以上是关于增加C#类库(DLL)调用wcf服务超时的主要内容,如果未能解决你的问题,请参考以下文章

通过 WCF 访问类库

如何解决 C# IIS 托管的 WCF NET TCP 服务超时问题

从类库调用 WCF 服务:App.Config 与 Web.Config?

在类库中使用 WCF 服务时出错

怎样用js调用wcf服务

WCF 不活动超时