WCF使用时碰到个莫名其妙的异常

  昨天在调试WCF服务时,碰到个异常,异常信息都让人看不懂。之前也没碰到过,折腾了一会才弄明白原因。

  像往常一样创建一个WCF库,就是可直接调试的那种WCF服务。然后加入了一个服务,该服务还用到了复杂自定义类型作为DataContract,并像往常一样启动调试,居然蹦出了一个错误提示框,里面有一些错误信息, 命名空间“TestNamespace.System”中不存在类型或命名空间名称“Runtime”(是缺少程序集引用吗?),如下图:

其中TestNamespace.System命名空间下是复杂类型所在的命名空间。出现这样的错误,一时让人毫无头绪。为什么回去自定义类型中去寻找Runtime和CodeDom这些东西呢?看起来像要实现什么动态处理的功能,或者动态代码生成。于是问题定位在自己定义的复杂类型中,去掉相关的引用后,改成系统的内置简单类型之后,就不出异常了。但总不能都用简单类型吧,之前也有这样的用法,都是OK的。
  最后求助万能的古戈,发现问题居然是出在命名空间上。原来是命名空间中包含了System关键字,然后系统在运行时会把用户自定义的System命名空间当做了系统内置的System命名空间,然后很自然的去寻找相关的系统类型,结果报出以上错误。更改命名空间的名字之后,问题解决。具体可参见http://stackoverflow.com/questions/3037098/compile-error-the-type-or-namespace-name-runtime-does-not-exist-in-the-names中二楼的回复内容。

     估计.NET中就是这么规定的,其他方面应该也会有这方面的限制,避免有这些关键字就OK了。不过提示信息确实不够明确,让人看不懂。

posted @ 2011-12-20 09:48  神八  阅读(560)  评论(0编辑  收藏  举报