WCF数据服务代理不想两次使用相同的命名空间

时间:2011-03-30 14:10:41

标签: wcf .net-4.0 namespaces wcf-data-services

我第一次为WCF数据服务创建代理时,代码生成器(Visual Studio 2010 SP1)将实体类型定义放在:

MyClient.DBService.DBModel

来自该服务的OData源看起来像这样:

<element p2:type="DBModel.GetWorkstationProfile_Result">

此版本的服务仅公开服务操作,而不是实体集。对项目的前半部分感到满意​​,然后我开始提供一些实体集,因此我在数据服务中为它们添加了一些访问规则,如下所示:

public static void InitializeService(DataServiceConfiguration config)
{
    config.SetEntitySetAccessRule("FooBars", EntitySetRights.AllRead);
    config.SetServiceOperationAccessRule("GetWorkstationProfile", ServiceOperationRights.All);

我在客户端上执行了“更新服务引用”,但现在代理将所有内容放入

MyClient.DBService

包括服务操作返回的复杂类型,以及过去的MyClient.DBService.DBModel

但是,数据服务仍然将返回元素的类型设置为DBModel.GetWorkstationProfile_Result,因此对象永远不会被反序列化。每次调用都会产生一个空列表,即使我可以在浏览器中查看相同的查询,并且看到来自该服务的OData就好了。

我可以通过在数据服务的SetEntityAccessRule方法中启用或禁用InitializeService来使代理代码生成器返回。已禁用 - 一切都在MyClient.DBService.DBModel;已启用 - 所有内容都在MyClient.DBService

这是WCF数据服务中的错误吗?如何说服代理代码生成器使用其原始命名空间,或让数据服务在新命名空间中传递元素?

1 个答案:

答案 0 :(得分:0)

您是否在导致新命名空间的服务器上进行了更改?

您可以尝试删除代理并从头开始创建。

修改

尝试:

config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);