2011-04-29 2 views
0

Можно создать дубликат:
WCF wrap proxy clientWCF обруч клиент (статические методы, вызовы методов обертки услуг)

У меня есть много вебов-методов в сфере услуг в моем проекте, которые используют клиентское приложение.

Я не хочу писать код что-то вроде этого:

using(ServiceClient sc = new ServiceClient()) 
    { 
     //Invoke service methods   
     sc.Method1(); 
    } 

Вместо, я хочу написать: ServiceClient.Method1(); (например) - в этом случае вся служебная операция, которая ссылается на прокси (инициализация, вызов, удаление, обработка исключений), будет внутри ServiceClient. Конечно, я могу обернуть любой из моих веб-методов аналогичным кодом или использовать отражение для извлечения метода по имени, но, возможно, существуют какие-либо другие способы?

+0

Ваши незарегистрированные счета, теперь у вас есть контроль над своим оригинальным вопросом. –

ответ

0

Если вы хотите, вы можете написать реализацию Singleton, которая обертывает все клиентские операции и внутренне поддерживает инициализированный клиент.

Затем вы выставляете методы, которые вы хотите использовать как статические элементы класса singleton. Это имеет дополнительное преимущество для ускорения служебной связи, поскольку большая часть перегрузки - это создание прокси (контрактная нагрузка, инициализация привязки и настройка клиента).

+0

Но как насчет распоряжения? Клиентский канал должен быть закрыт после служебного вызова – Yury

1

Как насчет статического метода, как это:

public static TResult Execute<TResult>(Func<ServiceClient, TResult> proxy) 
{ 
    using (var client = new ServiceClient()) 
    { 
     return proxy(client); 
    } 
} 

, а затем были объединены:

string result1 = Execute(proxy => proxy.Method1()); 
int result2 = Execute(proxy => proxy.Method2("some param", 123)); 
+0

Отличная идея! Спасибо вам! – Yury

+0

КПП. этот вид распорядителя не должен использоваться: http://weblogs.asp.net/cibrax/archive/2009/06/26/disposing-a-wcf-proxy.aspx –

+0

@Ladislav Mrnka, хороший момент. Код может быть легко адаптирован для использования этого вместо оператора 'use' для простого удаления канала. –

Смежные вопросы