自定義WCF RIA Services 超時時間


一般的WCF服務可以通過設置配置文件中Timeout屬性值來自定義服務的超時時間,但WCF服務沒有配置文件,默認的超時是60s。但有時候,我們的查詢時間超過60s,我們能不能通過自己來定義超時時間呢。

答案是肯定的。RIA Services生成的代理類剛好是部分(partial)類,我們可以利用這一點來設置超時。

先在Service項目中建一個類:WcfTimeoutUtility,這里設置超時方法

/// <summary>
  /// Utility class for changing a domain context's WCF endpoint's
  /// SendTimeout. 
  /// </summary>
  public static class WcfTimeoutUtility
  {
    /// <summary>
    /// Changes the WCF endpoint SendTimeout for the specified domain
    /// context. 
    /// </summary>
    /// <param name="context">The domain context to modify.</param>
    /// <param name="sendTimeout">The new timeout value.</param>
    public static void ChangeWcfSendTimeout(DomainContext context, 
                                            TimeSpan sendTimeout)
    {
      PropertyInfo channelFactoryProperty =
        context.DomainClient.GetType().GetProperty("ChannelFactory");
      if (channelFactoryProperty == null)
      {
        throw new InvalidOperationException(
          "There is no 'ChannelFactory' property on the DomainClient.");
      }

      ChannelFactory factory = (ChannelFactory)
        channelFactoryProperty.GetValue(context.DomainClient, null);
      factory.Endpoint.Binding.SendTimeout = sendTimeout;
    }
  }

通過部分類的特性,來改變默認的時間。

注意,這里的類名:MyDomainContext要與你Service中自動生成的代碼中的DomainContext類名一樣,而且命名空間也應該也web.g.cs中DomainContext類一致。

public partial class MyDomainContext
  {
    partial void OnCreated()
    {
      TimeSpan tenMinutes = new TimeSpan(0, 10, 0);
      WcfTimeoutUtility.ChangeWcfSendTimeout(this, tenMinutes);
    }
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM