2

按照说明使用反射提供程序 ( http://msdn.microsoft.com/en-us/library/dd728281.aspx ) 一切正常,直到我将类 Order 和 Item 移动到类库并引用类库来自带有 SVC 文件的 Web 项目。

将 POCO 类移动到 WCF 项目中一切顺利。

将 POCO 类从 WCF 项目中移出到单独的程序集中,我得到一个 500 没有任何解释。

我希望能够将我的 poco 类保存在一个单独的项目中,并使用 OData 端点公开它们。我究竟做错了什么?

--UPDATE--
上述场景旨在说明我使用 WCF OData Reflection Provider 发现的一个问题。这不是我真正的问题,但为了说明目的更容易解释。

4

2 回答 2

3

如果您尚未升级到最新版本的 WCF 数据服务(当前为 5.3),请尝试升级。我使用 .Net 4.5 附带的 WCF 数据服务版本重现了您的问题,但是一旦我使用 NuGet 将两个程序集中的引用升级到 Microsoft.Data.Services 的最新版本,问题就消失了。

如果您已经在使用最新版本的 WCF 数据服务,请确保两个程序集都引用完全相同版本的 WCF 数据服务。

如果这些都不能解决您的问题,请将以下属性添加到您的 DataService 类以获得更详细的错误消息和堆栈跟踪:

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class YourService : DataService<...>

然后请用结果更新您的问题(如果解决方案没有立即从堆栈跟踪中跳出)。

于 2013-04-01T20:50:16.250 回答
0

(免责声明:我通常不喜欢那些不能帮助您解决问题的答案,而是解释为什么您的问题不是正确的问题,但我认为在这种情况下这是合理的 :))

如果您考虑一下,您并不想这样做:
Order 和 Item 类根本不是真正的 POCO;它们不是“普通”的 C# 对象;它们具有数据属性,这使它们成为数据传输对象(DTO)。
它们属于您的服务与其客户端之间的接口;
域实体(或 POCO)Item 和 Order 很可能会更复杂一些,并且包含除数据之外的其他内容,例如操作和业务逻辑。

我相信正确的方法是拥有一个丰富的域模型,其中 Order 和 Item 包含一整套属性和操作,最重要的是,一个 DTO 层,它只包含您的服务客户端需要的那些属性。

通过电线发送 POCO 被称为“剥离模式”,我相信最好避免这种情况。

于 2013-03-18T21:25:04.810 回答