Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用来自不同项目的模型类通过反射提供程序创建WCF数据服务OData?_C#_Wcf_Reflection_Wcf Data Services_Odata - Fatal编程技术网

C# 如何使用来自不同项目的模型类通过反射提供程序创建WCF数据服务OData?

C# 如何使用来自不同项目的模型类通过反射提供程序创建WCF数据服务OData?,c#,wcf,reflection,wcf-data-services,odata,C#,Wcf,Reflection,Wcf Data Services,Odata,按照使用反射提供程序()的说明,一切正常,直到我将类顺序和项移动到类库,并使用SVC文件从web项目引用类库 将POCO类移动到WCF项目中,一切进展顺利 将POCO类从WCF项目移出到单独的程序集中,我得到了一个500,没有任何解释 我希望能够将我的poco类保留在一个单独的项目中,并使用OData端点公开它们。我做错了什么 --更新-- 上面描述的场景旨在说明我在使用WCF OData反射提供程序时发现的一个问题。这不是我真正的问题,但出于说明的目的更容易解释。(免责声明:我通常不喜欢那种对

按照使用反射提供程序()的说明,一切正常,直到我将类顺序和项移动到类库,并使用SVC文件从web项目引用类库

将POCO类移动到WCF项目中,一切进展顺利

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

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

--更新--
上面描述的场景旨在说明我在使用WCF OData反射提供程序时发现的一个问题。这不是我真正的问题,但出于说明的目的更容易解释。

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

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

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


通过网络发送POCO被称为“”,我认为最好避免这种情况。

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

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

如果这两种方法都不能解决您的问题,请向DataService类添加以下属性,以获取更详细的错误消息和堆栈跟踪:

[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class YourService : DataService<...>
[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults=true)]
公共类服务:数据服务

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

事实上,这并不能解决问题。我不是在要求关于模式的指导,我是在要求解决在使用OData反射提供程序时出现的WCF限制。发送POCO对象正是当今每个WebApi web服务项目所做的,它不是一种反模式。谢谢我认为我们对POCO的含义有不同的看法。对我来说,它意味着一个普通的物体;根据定义,具有数据属性表示法的对象不是简单的。我不熟悉WebApi项目,所以我不能评论这一部分,只是想说,如果确实是这样,我不同意这种技术的工作方式。我相信,除了向客户展示您的内部类之外,通过网络发送POCO(我指的是域对象)也不可避免地会导致发送冗余数据,这对于通信操作来说当然是非常糟糕的。我今天将尝试一下,并会让您知道它是否有效。谢谢你的提示!这为我解决了问题。谢谢你的提示。在将数据实体类型从主程序集移到公共类型程序集中时,我必须添加对Microsoft.data.Services.Client的引用,以访问DataServiceEntity属性和其他类型。我添加了程序集的.NET4.5版本,而不是WCF数据服务版本。呜呜声。