簡體   English   中英

ASP.NET客戶端的WCF客戶端代理

[英]WCF client proxy for ASP .NET client

我需要一些有關為ASP .NET客戶端創建WCF客戶端代理包裝的最佳方法的建議。 我想與ObjectDataSource控件一樣好地工作,而無需額外的編碼,當我需要手動調用WCF服務來獲取一些數據時,也是如此。 我基本上提出了兩種模型,但是我想知道哪種模型更有效。

這是第一個客戶端包裝器

public class Facade1 : IDisposable
{
   private readonly IClient proxy = ClientProxyFactory.GetObject<IClient>();

   public List<string> GetData()
   {
      proxy.GetData()
   }

   public List<string> GetMoreData()
   {
      proxy.GetMoreData()
   }

   public void Dispose()
   {
       ClientProxyFactory.CloseChannel(this.proxy);
   }
}

現在這是另一個WCF包裝器。

public class Facade2
{
   public List<string> GetData()
   {
        IClient proxy = ClientProxyFactory.GetObject<IClient>();

        try
        {
            return client.GetData();
        }
        finally
        {
            ClientProxyFactory.CloseChannel(proxy);            
        }
   }

   public List<string> GetMoreData()
   {
        IClient proxy = ClientProxyFactory.GetObject<IClient>();

        try
        {
            return client.GetMoreData();
        }
        finally
        {
            ClientProxyFactory.CloseChannel(proxy);            
        }
   }
}

在第一個示例中,只有一個客戶端代理實例,並且可以在各種方法之間重用它,但是該類需要實現IDisposable以便客戶端可以正確處理該代理。 在第二個示例中,每種方法有一個客戶端代理,並且客戶端不必擔心部署代理。

在不同方法之間重用代理是一個好方法嗎? 打開/關閉WCF代理時性能會受到影響嗎? (在兩個示例中,均假定每次都緩存ChannelFactory並通過cached_factory.CreateChannel()方法創建新的通道。)

例如,使用第一個包裝器,我可以執行以下操作:

using (Facade1 facade = new Facade1())
{
   facade.GetData()
   ...
   ...
   facade.GetMoreData()
}

在第二個示例中,我可以實例化我的外觀並調用所需的方法,而不必擔心部署代理。

提前致謝,

埃里克

如果在ASP.NET應用程序的單個HTTP請求處理中將此包裝用於WCF服務的多次調用,則比使用共享代理的模型更好。 如果要共享包裝器(使其全局),則應使用第二個模型。

重新創建代理的性能取決於所用綁定的類型及其配置。 例如,在BasicHttpBinding的情況下,可以快速重新創建代理,因為仍然可以存在來自先前代理的持久HTTP連接。 但是,在具有安全上下文的WSHttpBinding的情況下,重新創建代理意味着為建立安全會話建立了新的安全握手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM