2011-10-25 39 views
0

當前我編寫了一個WCF服務。該服務返回一個類型爲名爲「System」的用戶定義類的對象。代碼片段如下:Wcf服務元數據由於類名錯誤而無法訪問

[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:類型名稱'Runtime '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」 ...

但是,如果我重新命名類名「系統」,以其他名稱,如「System1」,這是可以的。我猜「系統」是一個保留的名稱空間名稱,不能使用。這是真的嗎?

+2

看到如何使用系統開始大量在.NET框架組件的,我會說,即使如果它不是一個保留的命名空間,至少使用它會讓其他開發者感到困惑。 – Tim

+0

再來看看,錯誤實際上是'Demo.DomainModel.System'類型中不存在'Runtime'類型。看看Client.cs中的第264行。 – Tim

+0

是的。 「系統」名稱很混亂,但由客戶指定。 – user1012036

回答

1

當你有行:

public partial class System : object, System.Runtime.Serialization.IExtensibleDataObject 
{ ... } 

的問題是,編譯器會剛剛定義的系統類的運行時類型,而不是在系統命名空間。

如果將global:放在System.Runtime之前,它至少會編譯。

public partial class System : object, global:System.Runtime.Serialization.IExtensibleDataObject 
{ ... } 

看一看這說明了一個系統級的你確切的問題如下:How to: Use the Global Namespace Alias

+0

+1用於發佈看起來可信的答案,但不需要大量的代碼查看:)雖然您可能想要在第二個代碼示例中的System.Runtime.Serialization.IExtensibleDataObject前面編輯放置全局答案。 .. – Tim

+0

修正了它!謝謝:) –

+0

哦,是的。這是問題的原因。但文件「ClientCode.cs」是自動生成的,我們不能修改它。對? – user1012036

相關問題