具有自定义端点行为的WCF客户端代理创建策略

时间:2010-01-20 15:45:34

标签: wcf wcf-client

我想在WPF客户端应用程序中集中创建我的WCF代理。在创建每个代理期间,我想定义特定于programaticaly的端点行为(添加本地化标头等)并定义客户端凭据设置(我使用带有UserName客户端凭据的消息级安全性)。代理的创建应如下所示:

public class ServiceChannelFactory
{
 public T CreateChannel<T, TService>() where T : ClientBase<TService>
 {
  var proxy = new T(bindingBuilder.GetBinding(), endpointBuilder.GetEndpointAddress()); //!!!
  proxy.Endpoint.Behaviors.Add(new LocalizationEndpointBehavior());
  proxy.ClientCredentials.UserName.UserName = applicationContext;
  proxy.ClientCredentials.UserName.Password = txtPassword.Password;
  return proxy;
 }
}

并且用法应如下所示:

var scp = new ServiceChannelFactory();
var proxy = scp.CreateChannel<MyServiceClient, ICustomerService>();
proxy.Open();
try
{
    proxy.CallService();
}
finally
{
    proxy.Close();
}

但我无法弄清楚如何在不使用反射的情况下实际创建代理对象(// !!!注释行)。

MyServiceClient类由VS&gt;添加服务引用生成。

这个问题是否有最佳实践解决方案?

1 个答案:

答案 0 :(得分:1)

如果添加new()约束,则可以创建泛型类型的实例,假设它具有无参数的构造函数。

public class ServiceChannelFactory 
{ 
    public T CreateChannel<T, TService>() 
    where TService : class
    where T : ClientBase<TService>, new()
    { 
        var proxy = new T();

        //Configure proxy here

        return proxy; 
    } 
}