Стратегия создания прокси клиента WCF с настраиваемым поведением конечной точки - PullRequest
1 голос
/ 20 января 2010

Я бы хотел централизовать создание моих прокси-серверов WCF в клиентском приложении WPF. Во время создания каждого прокси-сервера я хотел бы определить конкретные программные поведения конечной точки (добавление заголовков локализации и т. Д.) И определить настройки учетных данных клиента (я использую защиту на уровне сообщений с учетными данными клиента 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> Добавить ссылку на службу.

Есть ли лучшие решения этой проблемы?

1 Ответ

1 голос
/ 20 января 2010

Если вы добавите новое ограничение (), вы можете создать экземпляр универсального типа, предполагая, что он имеет конструктор без параметров.

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; 
    } 
}
...