2013-07-03 6 views
2

У меня возникли проблемы с распространением моего общедоступного класса enum из моей службы WCF до моей клиентской программы. (Я хочу иметь доступ к каждому атрибуту перечисления из моей клиентской программы). (Я добавил свою службу как i Service Reference). (Для тестирования у меня есть только два 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

может у передислоцировать DataContract сущности новый проект и добавить ссылки от них? – Roar

+0

Вы обновили клиент? Offtopic: Также я бы предложил сделать 'comands' свойство и правильно обложенное:' public CommandsEnum Comand {get; задавать; } '. По соглашению перечисление, которое не помечено как '[Flags]', должно быть сингулярным и множественным, если оно есть. – Silvermind

+0

Не могли бы вы попытаться переместить enum из класса и объявить его самостоятельно? Будьте заинтересованы, чтобы решить, разрешит ли это проблему. –

ответ

1

Я думаю, вы здесь несколько путаете.

  1. В IService не было никаких операций. Служба ServiceContract должна иметь несколько OperationContracts, которые вы реализуете в своем классе Service.
  2. Реализация вашего IService, класса Service, НЕ должна быть DataContract! Это ваша реализация интерфейса IService.
  3. 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

Спасибо Флориан. Но я все еще не вижу перечисления на моем клиенте. Я вижу метод Test, например: Svc.Test(); Но как мне получить доступ к перечислениям от клиента? – user1281991

+0

Я действительно не понимаю, что вы хотите сделать с перечислениями, можете ли вы объяснить немного больше, какую информацию вы хотите получить с сервера? – flayn

0

Ваше перечисление не должно включаться в код сервера. Если вы хотите разделить общий код, поместите его в обычное место. Таким образом, клиент и сервер могут ссылаться на него.

+0

Не могли бы вы объяснить, что такое «общее местоположение»? Я совершенно новичок в этом :) Спасибо – user1281991

+0

У вас есть проект, который является клиентом, не так ли? И у вас есть проект, который является сервером, не так ли? Создайте еще один проект (библиотеку классов), называемый ITHelperCommon. Затем вставьте свой перечислитель. Тогда ваш клиент и ваш сервер должны будут обратиться к ITHelperCommon. –