[英]Caching WCF ChannelFactory or client proxy in ASP.NET on Azure?
[英]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.