我想在 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 生成。
有没有解决这个问题的最佳实践?