none
wcf 实体引用不确定问题 RRS feed

  • 问题

  • 在使用WCF进行开发的过程中 总是偶尔的会被一个错误给折磨

    错误 501 “AreaInfoPackage”是“AreaInfoClient.AreaInfoPackage”和“Entities.AreaInfoPackage”之间的不明确的引用

    服务端引用的是程序集entities

    正确生成代理类的情况应该是内部的实体引用为entities内的实体类

    public OPN.Entities.AreaInfoPackage[] GetAreaByKind(string level) {
    return base.Channel.GetAreaByKind(level);
    }

    出现错误的情况是 代理类内的实体引用 变成了错误的命名空间 命名空间规则为 项目默认命名空间+代理类类名+实体对象 此时的对象已经不是同一个对象 无法正常编译

    错误代码

    public OPN.Control.OPN.Services.AreaInfoClient.AreaInfoPackage[] GetAreaByKind(string level) {
    return base.Channel.GetAreaByKind(level);
    }

    特别是今天 把整个项目给清理了一下 然后编译 全部代理类实体引用错误

    在以往的处理过程中 通常采用的方法是关闭VS 重现打开 更新引用后可以解决

    但是今天同样的操作却依然不能解决问题

    另外由于项目比较大 在更新时出现了 未将对象引用到实例 的错误 而且不能生成正确的代理类

    不知道坛子里的朋友们有没有遇到这个问题

    希望能得到大家的指点

    太神奇了  今天试着编译竟然直接通过了 是BUG吗?
    2011年7月30日 15:27

答案

  • 因为所采用的实体设计并不单单的只是字段定义  实体内部包含一些其他的设计

    但是生成的错误代码中却只包含对于数据契约的定义  从而导致无法编译

    另外跟服务端用同一个实体类  也是为了保证设计的统一性


    那你就不要通过服务引用自动生成代码,而是通过直接使用服务端的服务契约.
    • 已标记为答案 Memroy 2011年8月2日 7:42
    2011年8月2日 1:18

全部回复

  • 生成客户端代理类的时候可以指定命名空间,因为你们使用了自动生成代码的机制,所以你们可以检查下是否在客户端直接引用了服务端的程序集entities.

     

    2011年8月1日 2:39
  • 客户端的实体引用 是跟服务端的实体引用指向的同一个程序集

    但是生成的代码 有时候会出现上面的错误

    2011年8月1日 3:28
  • 客户端的实体引用 是跟服务端的实体引用指向的同一个程序集

    但是生成的代码 有时候会出现上面的错误


    如果你使用自动生成的代理,那么生成的代码中将包含数据契约的定义,也就是实体类.因此,不用再引用服务端的程序集.如果你混用,就会造成命名空间冲突的错误.
    2011年8月1日 3:55
  • 因为所采用的实体设计并不单单的只是字段定义  实体内部包含一些其他的设计

    但是生成的错误代码中却只包含对于数据契约的定义  从而导致无法编译

    另外跟服务端用同一个实体类  也是为了保证设计的统一性

    2011年8月1日 10:29
  • 因为所采用的实体设计并不单单的只是字段定义  实体内部包含一些其他的设计

    但是生成的错误代码中却只包含对于数据契约的定义  从而导致无法编译

    另外跟服务端用同一个实体类  也是为了保证设计的统一性


    那你就不要通过服务引用自动生成代码,而是通过直接使用服务端的服务契约.
    • 已标记为答案 Memroy 2011年8月2日 7:42
    2011年8月2日 1:18
  • 看来还得继续学习啊  呵呵 
    2011年8月2日 7:42