Ping WCF数据服务或WCF服务

时间:2017-02-11 12:48:11

标签: c# .net performance wcf wcf-data-services

我调查了一件坏事,假设我们有一个数据服务,我们想在消费者方面调用它,例如:

 Uri dataManURI = new Uri("http://localhost:2040/DTService.svc/rest");
 DataServiceContext dataServiceContext = new DataServiceContext(dataManURI);
 var all = from ex in dataServiceContext.CreateQuery<ExternalPath_DTO>("ExternalPaths")
                                                      select ex;
很长时间后我会得到:

  

无法加载外部路径!,EXP:System.Data.Services.Client.DataServiceTransportException:操作已超时---&gt; System.Net.WebException:操作已超时      在System.Net.HttpWebRequest.GetResponse()      在System.Data.Services.Client.HttpWebRequestMessage.GetResponse()      ---内部异常堆栈跟踪结束---      在System.Data.Services.Client.HttpWebRequestMessage.GetResponse()      在System.Data.Services.Client.DataServiceContext.GetResponseHelper(ODataRequestMessageWrapper请求,IAsyncResult asyncResult,Boolean handleWebException)      在System.Data.Services.Client.QueryResult.ExecuteQuery()

或WCF服务:

 AuthClient ac = new AuthClient("authEndPoint", Token);
 ac.RemoveUser(new RemoveUser_DTO_IN() { UserId = uidToDel });

因此,如果服务不可用,则需要很长时间才能捕获异常,我认为如果将receivetimeout设置为00:01:00,则需要1分钟才能知道操作是否超时。

在另一方面UI 被冻结直到响应(在我的情况下1分钟才能得到失败的响应)。

这些解决方案是否有用,如果是,但如何?

1 - 定义一个简单的操作,例如Ping(),并在任何主操作之前调用它?

   AuthClient ac = new AuthClient("authEndPoint", Token);
   var watch = System.Diagnostics.Stopwatch.StartNew();
   var ping = Task.Run(() =>
   {
      ac.Ping();
   });
   try
   { 
     if (!ping.Wait(ac.Endpoint.Binding.OpenTimeout))
       {
          //Timeout on Ping for end point
           watch.Stop(); 
           return;
        }
   }
   catch (Exception exp)
    {
      watch.Stop(); 
      return;
    }

我希望在3秒内(开放时间)得到回复,我认为如果Ping()在3秒内没有回复,那么该服务将无法使用。

2 - telnet服务?

解决方案1:我认为解决方案1在没有任务编程和!ping.Wait(ac.Endpoint.Binding.OpenTimeout)的情况下是不合适的,因为我的上述说明如果服务不可用则需要1分钟(终点接收)时间)说操作超时。

解决方案2:如何,真实的例子?

是否还有其他机制可以非常快速地了解服务是否可用?

任何帮助都会得到真正的赞赏。

1 个答案:

答案 0 :(得分:0)

你试过Warm-up your IIS pool initialization吗?

  

网站管理员面临的一个常见问题是需要执行初始化任务和预热&#34; Web应用程序的任务。更大和更复杂的Web应用程序可能需要在提供第一个HTTP请求之前执行冗长的启动处理,主要内存缓存,生成内容等。

     

IIS 8.0应用程序初始化功能使网站管理员能够配置IIS 8.0以主动执行一个或多个Web应用程序的初始化任务。

我一直面临类似的问题 - 但不是那么多(1分钟+)。 IIS通常需要几秒钟(10~20秒)来启动,因此操作循环间隔(默认为1740分钟)和空闲超时(默认为20分钟)可能会改善您的服务。