2013-07-03 194 views
2

我遇到了問題,從我的WCF服務共享我的公共枚舉類到我的客戶端程序。 (我希望能夠訪問我的客戶端程序中的每個枚舉屬性)。 (我已將我的服務添加爲服務參考)。 (爲了測試我只有兩個EnumMemer - 我知道..)在客戶端和WCF服務之間共享枚舉?

我有這個在我的Service.svc.cs文件:

namespace ITHelperService 
{ 
[DataContract] 
public class Service : IService 
{ 
    [DataMember] 
    public CommandsEnums comands; 

    [DataContract(Name="CommandsEnums")] 
    public enum CommandsEnums 
    { 
     [EnumMember] 
     Get_IPConfig, 
     [EnumMember] 
     Get_IPConfig_all, 
     Get_BIOSVersion, 
     Get_JavaVersion, 
     Get_RecentInstalledPrograms, 
     Get_RecentEvents, 
     Get_WEIScore, 
     Do_Ping, 
     Do_NSLookup 
    } 
} 
} 

這是我IService.cs文件:

namespace ITHelperService 
{ 
[ServiceContract] 
[ServiceKnownType(typeof(ITHelperService.Service.CommandsEnums))] 
public interface IService 
{ 


} 
} 

我已經在互聯網上搜索過這個問題,看起來上面應該可以做到。 但我無法在我的客戶端程序中訪問它們。它沒有出現在intellisense中。

請輸入任何內容?

+0

u能搬遷datacontract實體到新的項目並添加引用從這些? – Roar

+0

你是否更新過客戶端? Offtopic:另外我會建議使'comands'屬性和適當的套裝:'公共CommandsEnum命令{get;組; }'。按照慣例,沒有標記爲「[Flags]」的枚舉應該是單數化的,如果是的話就是複數形式。 – Silvermind

+0

你可以嘗試將enum移出課程並自行申報嗎?有興趣看看是否能解決問題。 –

回答

1

我認爲你在這裏混淆了一些東西。

  1. IService在其中沒有任何操作。 ServiceContract應該有一些OperationContracts,你在你的Service類中實現。
  2. 您的IService服務類的實現不應該是DataContract!這是您實現IService接口。正如Simon指出的,Enum CommandsEnums可能不在Service類的實現中。

我建議水木清華這樣的: IService.cs文件:

namespace ITHelperService 
{ 
[ServiceContract] 
[ServiceKnownType(typeof(ITHelperService.Service.CommandsEnums))] 
public interface IService 
{ 
    [OperationContract] 
    void Test(); 
} 
} 

Service.svc.cs文件:

namespace ITHelperService 
{ 
[DataContract] 
public class Service : IService 
{ 
    public void Test() 
    { 
    // This is the method that you can call from your client 
    } 

} 

[DataContract(Name="CommandsEnums")] 
    public enum CommandsEnums 
    { 
     [EnumMember] 
     Get_IPConfig, 
     [EnumMember] 
     Get_IPConfig_all, 
     Get_BIOSVersion, 
     Get_JavaVersion, 
     Get_RecentInstalledPrograms, 
     Get_RecentEvents, 
     Get_WEIScore, 
     Do_Ping, 
     Do_NSLookup 
    } 
} 
+0

謝謝Florian。但我仍然無法在客戶端看到枚舉。我可以看到Test方法,如:Svc.Test();但是,我應該如何訪問客戶端的枚舉? – user1281991

+0

我真的不明白你想用枚舉來做什麼,你能解釋一下你想從服務器獲得什麼信息嗎? – flayn

0

您的枚舉不應包含在服務器端代碼中。如果你想分享共同的代碼,然後把它放在一個共同的位置。這樣,客戶端和服務器都可以引用它。

+0

你能解釋一下「常見的位置」可能嗎?我對此很新穎:)謝謝 – user1281991

+0

你有一個項目是客戶,對嗎?你有一個項目是一個服務器,對吧?創建另一個項目(類庫),稱爲ITHelperCommon。然後把你的枚舉放在那裏。然後你的客戶和你的服務器將不得不引用ITHelperCommon。 –

相關問題