在客户端和WCF服务之间共享枚举?

时间:2013-07-03 18:25:07

标签: c# wcf enums

我在将我的公共枚举类从我的WCF服务分享到我的客户端程序时遇到问题。 (我希望能够从我的客户端程序访问每个枚举属性)。 (我已将我的服务添加为服务参考)。 (为了测试我只有两个EnumMemer - 我知道..)

我在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中。

请输入任何内容?

2 个答案:

答案 0 :(得分:1)

我认为你在这里混淆了一些事情。

  1. IService中没有任何操作。 ServiceContract应该有一些您在Service类中实现的OperationContracts。
  2. 您的IService(Service类)的实现不应该是DataContract!它是您对IService接口的实现。
  3. Enum CommandsEnums可能不应该在Service类的实现中,正如Simon指出的那样。
  4. 我建议像这样的smth: 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
        }
    }
    

答案 1 :(得分:0)

您的枚举不应包含在服务器端代码中。如果要共享公共代码,请将其放在公共位置。这样客户端和服务器都可以引用它。