问题是,如果您在调用 dispose 时遇到异常,您将获得一个涵盖您的基础异常的异常。我写了一个包装器来处理这样的场景,你可以在我的博客上阅读它:http: //blog.tomasjansson.com/2010/12/disposible-wcf-client-wrapper/
这个想法是,如果 dispose 方法抛出异常,您的通道周围会有一个包装器来处理该场景。
你应该如何使用我的包装器的一个小例子:
public class ClientWrapperUsage : IYourInternalInterface
{
public IList<SomeEntity> GetEntitiesForUser(int userId)
{
using(var clientWrapper = new ServiceClientWrapper<ServiceType>())
{
var response = clientWrapper.Channel.GetEntitiesForUser();
var entities = response.YourListOfEntities.TranslateToInternal();
return entities;
}
}
}
在这里,我假设它存在用于包含服务返回的实体的列表的扩展方法,然后您使用该方法将其转换为内部实体。这是 100% 可测试的,至少我认为 :)。只需IYourInternalInterface
在您不想伪造服务的任何地方修改界面即可。