【发布时间】:2011-10-25 14:52:37
【问题描述】:
目前我编写了一个 WCF 服务。该服务返回一个对象,其类型是名为“System”的用户定义类。代码sn-p如下:
[DataContract]
public class System
{
// ....
}
[ServiceContract]
public interface DemoServcie
{
[OperationContract]
System GetSystem();
}
但是我在运行 wcf 服务时遇到了一个问题。错误信息是:
添加服务失败。服务元数据可能无法访问。确保您的服务正在运行并公开元数据。
c:\Users\xxx\AppData\Local\Temp\Test Client Projects\10.0\6909a900-97bd-4efb-aae9-6c2e9b23e4b9\Client.cs(321,50):错误 CS0426:类型名称“运行时” 'Demo.DomainModel.System' 类型中不存在 c:\Users\xxx\AppData\Local\Temp\Test Client Projects\10.0\6909a900-97bd-4efb-aae9-6c2e9b23e4b9\Client.cs(264,18):错误 CS0426:类型名称“运行时”不存在在“Demo.DomainModel.System”类型中 ...
但是如果我将类名“System”重命名为“System1”等其他名称,就可以了。我猜“系统”是一个保留的命名空间名称,不能使用。是真的吗?
【问题讨论】:
-
看到 .NET 框架中的大量程序集是如何以 System 开头的,我想说即使它不是保留的命名空间,使用它至少会让其他开发人员感到困惑。
-
再看,错误其实是
Demo.DomainModel.System类型中不存在Runtime类型。查看 Client.cs 中的第 264 行。 -
是的。 “系统”名称令人困惑,但它是由客户指定的。
-
我查看了Client.cs中的代码。发生错误的行就像“public partial class System : object, System.Runtime.Serialization.IExtensibleDataObject”。
-
如果框架不允许您使用“系统”,那么您和客户将不得不提出不同的解决方案/名称。