Этот ответ был опубликован в ответ на этот вопрос.
Сейчас это немного выше моего понимания, но предполагается ли использовать «функцию более высокого порядка» в клиентском прокси-классе? Это правильное использование?:
public class MyProxy
{
readonly IMyService service =
new ChannelFactory<IMyService>("IMyService").CreateChannel();
public ResponseObject Foo(RequestObject request)
{
return UseService((IMyService service) =>
service.Bar(request));
}
T UseService<T>(Func<IIssueTrackerService, T> code)
{
bool error = true;
try
{
T result = code(issueTrackerChannel);
((IClientChannel)issueTrackerChannel).Close();
error = false;
return result;
}
finally
{
if (error)
{
((IClientChannel)issueTrackerChannel).Abort();
}
}
}
}
Все, что я действительно ищу, - это какое-то руководство здесь и правильный способ сделать это.