Можно ли избавиться от универсального типа TClient в классе Service
Для клиентов WCF у меня естьIServiceProxyFactory
интерфейс для установки учетных данных.
public interface IServiceProxyFactory<T>
{
T GetServiceProxy();
}
public class ServiceProxy1 : IServiceProxyFactory<ServiceClient1>
{
public ServiceClient1 GetServiceProxy()
{
var client = new ServiceClient1();
// set credentials here
return client;
}
}
public class ServiceProxy2 : IServiceProxyFactory<ServiceClient2> {
// ...
}
Из вопросаКак лучше всего обойти проблему с клиентом WCF, использующим блокировку?и я создал помощника следующим образом:
public static class Service<TProxy, TClient>
where TProxy : IServiceProxyFactory<TClient>, new()
where TClient : ICommunicationObject
{
public static IServiceProxyFactory<TClient> proxy = new TProxy();
public static void Use(Action<TClient> codeBlock)
{
TClient client = default(TClient);
bool success = false;
try
{
client = proxy.GetServiceProxy();
codeBlock(client);
((ICommunicationObject)client).Close();
success = true;
}
finally
{
if (!success)
{
((ICommunicationObject)client).Abort();
}
}
}
}
И я использую помощник как:
Service<ServiceProxy1, ServiceClient1>.Use(svc => svc.Method());
Вопрос:
Есть ли способ, которым я могу избавиться отTClient
или жеTProxy
(Обновлено) введите, чтобы я мог позвонить с помощью:
Service<ServiceProxy1>.Use(svc => svc.Method());
ИЛИ ЖЕ(Обновлено)
Service<ServiceClient1>.Use(svc => svc.Method());
Есть ли лучший способ, чем использоватьICommunicationObject
заClose()
а такжеAbort()
?