C# ASP.NET客户端的WCF客户端代理

C# ASP.NET客户端的WCF客户端代理,c#,wcf,wcf-client,C#,Wcf,Wcf Client,我需要一些关于为ASP.NET客户端创建WCF客户端代理包装器的最佳方法的建议。我希望在无需额外编码的情况下,以及在需要手动调用WCF服务以获取一些数据的情况下,同样能够很好地使用ObjectDataSource控件。我基本上提出了两种模式,但我想知道哪一种更有效 这是第一个客户机包装器 public class Facade1 : IDisposable { private readonly IClient proxy = ClientProxyFactory.GetObject<

我需要一些关于为ASP.NET客户端创建WCF客户端代理包装器的最佳方法的建议。我希望在无需额外编码的情况下,以及在需要手动调用WCF服务以获取一些数据的情况下,同样能够很好地使用ObjectDataSource控件。我基本上提出了两种模式,但我想知道哪一种更有效

这是第一个客户机包装器

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);
   }
}
在第二个示例中,我可以实例化我的facade并调用所需的方法,而不用担心如何处理代理

提前感谢,


Eric

如果在ASP.NET应用程序中的单个HTTP请求处理中使用此包装器对WCF服务进行多次调用,则使用共享代理的模型会更好。如果您想共享包装器(使其成为全局的),那么应该使用第二个模型


重新创建代理的性能取决于使用的绑定类型及其配置。例如,在BasicHttpBinding的情况下,重新创建代理可以很快,因为仍然存在来自前一个代理的持久HTTP连接。但在使用安全上下文的WSHttpBinding的情况下,重新创建代理意味着新的安全握手以建立安全会话。

我将为第一个包装器或第二个包装器创建一个单独的程序集,具体取决于我选择的程序集。在第一个模型中共享包装器是否存在问题?至于性能问题,目前该服务托管在Windows 2003 server w/IIS6中,因此我只使用basicHttpBinding,但将来,我们可能会升级到Windows server 2008并将其托管在IIS7中,在IIS7中我可以使用netTcpBinding和IIS7中的WAS。我有点喜欢第一个模型,其中代理在方法之间共享。唯一的缺点是客户端必须记住正确地处理包装器。
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);            
        }
   }
}
using (Facade1 facade = new Facade1())
{
   facade.GetData()
   ...
   ...
   facade.GetMoreData()
}