我设计了一个 Web服务,在每个方法调用时,如果请求成功执行,将返回某种类型T
的结构,否则抛出{{1} }向客户端发出一些错误信号。其中一个客户端应用程序是一个ASP.NET应用程序,其中有一堆FaultException
个对象直接与服务方法相关联。这些对象将处理诸如GridView分页或DropDown为自己填充的内容。
不幸的是,我刚刚被命令从服务中删除所有ObjectDataSource
并将我返回的类型包装成一个通用FaultException
结构,该结构包含ServiceResponse<T>
类型的原始返回结构并添加一些字段来传输异常信息。没有其他选择,我立即做了这个,并通过调用泛型T
方法替换了所有旧的服务代理调用,如果请求成功则会自行解包值,否则抛出一些异常。现在的问题是,由于这个新方法是通用的,我不能将ExecuteMethod<TChannel, TReturn>
绑定到它,并且GridView自动分页已经消失。
由于ObjectDataSource
不支持泛型方法,也没有支持泛型类而没有大量使用我想避免的程序集限定类型名称的修改,我留下了GridView的任一页面的选项手动,我也想避免,或编写代理来包装每个必要的服务调用并返回所需的值,然后“包装一个包装器”。能帮我决定哪一个不是最差的吗?在这种情况下,我还有其他选择吗?
答案 0 :(得分:1)
我更喜欢你称之为“包装包装”的方法。在建筑上它完全有效,因为每个人都有一个责任。
如果服务合同不稳定,那么维护是很痛苦的,但它可能比组装合格名称方法在相同情况下更易于维护。
(RANT:除此之外,我相信“命令”您从服务中删除故障的人理解这将对服务的互操作性产生的影响。此外,该方法允许服务实现者和消费者获得自己如果他们无法正确实现你的新专有协议就会陷入困境。似乎它实际上并没有实现任何目的,因为所有你改变的是在客户端将Fault转换为异常的机制。)