Я написал метод расширения для использования с службами WCF, который хранит всю логику удаления и обработки исключений в одном месте. Метод заключается в следующем:Вызов службы WCF с использованием метода расширения
public static TResult CallMethod<TChannel, TResult>(
this ClientBase<TChannel> proxy,
Func<TResult> func) where TChannel : class
{
proxy.ThrowIfNull("proxy");
func.ThrowIfNull("func");
try
{
// set client credentials
return func();
}
finally
{
if (proxy != null)
{
try
{
if (proxy.State != CommunicationState.Faulted)
{
proxy.Close();
}
else
{
proxy.Abort();
}
}
catch (CommunicationException)
{
proxy.Abort();
}
catch (TimeoutException)
{
proxy.Abort();
}
catch (Exception)
{
proxy.Abort();
throw;
}
}
}
}
метод будет использоваться следующим образом:
public int CreateBusinessObject(BusinessObject item)
{
MyServiceClient proxy = new MyServiceClient();
return proxy.CallMethod(() => proxy.CreateBusinessObject(item));
}
Мой вопрос действительно ли это будет лучше как статический метод, который создает прокси-сервис? Я немного обеспокоен моей текущей реализацией. Должно ли построение прокси-сервера внутри try/catch? Мое настоящее понимание заключается в том, что если конструктор терпит неудачу, в любом случае все равно ничего не стоит.
Хорошая точка. Я должен был попробовать попробовать что-то вроде этого. Благодарю. –