【问题标题】:WCF Client proxy creation strategy with custom endpoint behavior具有自定义终结点行为的 WCF 客户端代理创建策略
【发布时间】:2010-01-20 15:45:34
【问题描述】:

我想在 WPF 客户端应用程序中集中创建我的 WCF 代理。在创建每个代理期间,我想以编程方式定义特定的端点行为(添加本地化标头等)并定义客户端凭据设置(我将消息级安全性与 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>Add Service Reference 生成。

这个问题有什么最佳实践解决方案吗?

【问题讨论】:

    标签: wcf wcf-client


    【解决方案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; 
        } 
    }
    

    【讨论】:

    • 你是对的 - 我认为 Endpoint.Binding 和 Address 没有设置器,所以我没有意识到它是如此简单:) 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2023-01-04
    • 2019-10-01
    相关资源
    最近更新 更多