我注意到少数WCF应用程序选择“拆分”它们的对象; 也就是说,除了执行业务逻辑的有意义的类库之外,项目可能还有一个包含DataContracts / Members的DataObjects程序集。

这是不必要的抽象级别吗? 是否存在与使用DataContract信息进行标记和标记现有类库相关的固有邪恶?

另外,另外,您如何处理错误情况? 是否通常接受服务抛出的异常(InvalidOperation,ArgumentException等),或者通常是否有一个级别?

===============>>#1 票数:17 已采纳

将内部业务对象与数据合同/消息合同分离的关键原因是您不希望对应用程序进行内部更改以改变服务合同。 如果您正在创建版本化Web服务(具有多个版本的已实现接口),那么您通常只有一个版本的应用程序业务对象具有多个版本的数据协定/消息合同对象。

此外,在复杂的企业集成情况下,您通常会拥有许多应用程序共享的规范数据格式(数据和消息协定),这会强制每个应用程序将规范数据格式映射到其内部对象模型。

如果你想要一个工具来帮助分离数据合同/消息合同等细节,那么请查看Microsoft的Web服务软件工厂http://msdn.microsoft.com/en-us/library/cc487895.aspx哪个有一些解决WCF管道的好方法。

关于excpetions,WCF会自动包装FaultExceptions中的所有异常,这些异常被序列化为线路格式错误。

也可以抛出通用的故障异常,它允许您指定序列化故障中包含的其他详细信息。 由于Web服务操作引发的错误是其合同的一部分,因此在操作声明中声明错误是个好主意:

[FaultContract(typeof(AuthenticationFault))]
[FaultContract(typeof(AuthorizationFault))]
StoreLocationResponse StoreLocation(StoreLocationRequest request);

AuthenticationFault和AuthorizationFault类型都表示要通过线路序列化和发送的其他详细信息,可以按如下方式抛出:

throw new FaultException<AuthenticationFault>(new AuthenticationFault());

如果你想要更多的细节,那么大喊; 我一直生活和呼吸这些东西这么长时间我几乎以此为生;)

  ask by Gabriel Isenberg translate from so

未解决问题?本站智能推荐:

1回复

WCF数据对象最佳实践

我正在处理从Web服务到WCF的迁移,而不是尝试使旧代码在WCF中工作,而是准备重建服务。 作为此过程的一部分,我还没有找到最佳的设计来提供易于使用的服务并支持将来的更改。 我的服务遵循以下模式; 实际上,我有比这更多的方法,因此重复代码是一个问题。 遵循此建议,我首先为Req
1回复

WCF:暴露的对象模型-陷入循环

我正在从事一个相当大的WSSF项目。 我在业务层中有一个普通的对象模型。 例如,客户具有订单收集属性,当该属性被访问时,它将从数据层加载(延迟加载)。 订单具有productCollection属性等。 现在,我发现有些棘手的地方是通过WCF公开了这一点。 我要导出订单集合。 客
1回复

SharePoint Server对象模型和WCF

我试图从WCF服务器内的项目访问包含SharePoint Server对象模型代码的API。 我的目的是下载SharePoint服务器上的文档。 我的代码在WCF服务器内。 SharePoint服务器是另一台服务器。 每当我尝试使用时访问服务器 它不知道服务器。 因此,
4回复

设计SOA WCF Web服务时的最佳实践是什么?

给定一个运营合同,例如: 可以将其重新设计为: 我喜欢MessageContract的一件事是,我对SOAP消息的格式有了更明确的控制。 同样,我可以编写几乎相同的代码,但使用DataContract: 我喜欢DataContract的一件事是,我可以定义IsReq
1回复

Silverlight中的WCF最佳实践/最清洁方法实现

http://www.dnrtv.com/default.aspx?showNum=122 观看了上面的视频“ Extreme WCF”之后,我喜欢采用干净的代码布局方法。 但是,这并不直接适用于Silverlight。 我想知道是否有人知道如何将视频末尾的代理绑定到Silve
2回复

WCF中EF导航属性的最佳实践

根据.NET的当前状态,建议的模式和/或技术是什么? 我想通过WCF服务传播我的EF生成的SQL数据库模型。 我不想在EF中关闭延迟加载,因为我不希望层次结构化实体的级联加载。 在客户端,我不能访问导航属性,好像我会处理真正的EF对象而不是WCF代理。 我不想发送包含上下文对象的
2回复

WCF客户最佳实践

调用某些WCF操作时,我们面临超时问题。 我们没有明确关闭连接。 这可能是造成问题的原因吗? 站点上的用户数量很少,服务器上的maxconcurrentsession设置为150。 我们在客户端调用服务的方法有20种。 下面是否需要对调用服务的所有方法进行操作? 打开
3回复

WCF客户-最佳实践

我只是想听听您对WCF客户端实现的看法。 我有一台提供多种服务的服务器,例如SecurityManager。 该服务在接口ISecurityManager中定义,并在Class SecurityManager中实现。 到目前为止,一切都很好。 在客户端,我想通过一个单独的类实现服
2回复

WCF响应类最佳实践

我不确定WCF中的响应消息是否有最佳实践。 有人可以指导我正确的方向吗? 我有一个具有以下属性的BlaResponse对象: 还有什么我需要补充的,例如错误数量,错误细节。 成功相关ID等等? 先感谢您。
1回复

弃用WCF服务的最佳实践

是否有任何服装或类似机制通知Web服务使用者已弃用服务/操作合同? 我有一组需要更新的WCF服务。 作为此更新的一部分,我想简化一些原始设计。 我计划保留现有的操作,但是我想以某种方式通知最终用户,他们已不赞成使用新的操作/服务。 实现此目的的最佳做法是什么?