从wcf服务显示enums客户端

时间:2010-03-09 15:11:38

标签: wcf service enums client

我不知道是否可能,但我希望能够在客户端引用我的WCF服务中的枚举。我有一个核心项目,在该项目中,枚举是:

public enum StatusType
{

    Ok = 1,

    Error = 2, 
    Unknown = 0

}

public enum DirectionType
{
    None = 0,
    ToSystem = 1,
    FromSystem = 2
}

我有一个使用核心项目的服务项目,它正在设置来自核心项目的枚举类型,如下所示:

[DataContract()]
static class EnumHelper
{
    public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider)
    {
        List<Type> knownTypes = new List<Type>();

        // Add any types to include here.
        knownTypes.Add(typeof(StatusType));
        knownTypes.Add(typeof(DirectionType));
        return knownTypes;
    }
}

在界面中:

[ServiceKnownType( typeof(EnumHelper))]
[ServiceContract( SessionMode =  SessionMode.Allowed)]
public interface HandlerService

当我调用一个获取或返回枚举的方法时,它工作正常,但我必须引用客户端项目中的核心项目来使用枚举客户端,我希望从服务中执行此操作如果可能的话。

我尝试将核心项目中的枚举设置为

[DataContract]
public enum StatusType
{
    [EnumMember]
    Ok = 1, /*!<Done with no error */
    [EnumMember]
    Error = 2, /*!<Done with error */
    [EnumMember]
    Unknown = 0, /*!<No data registered, default value */
}

没有效果。

我想在我的客户端项目中使用它:

或者像client.StatusType.Ok或Servicereference1.StatusType.Ok那样, 注意像Core.StatusType.Ok

我想要这个的原因是因为服务应该在不同的项目中使用,并且我们不希望每个人都依赖于一个共同的dll liberary,如果它可以跳过它。我使用net.tcp绑定服务。希望这是可以理解的,感谢任何帮助:)

1 个答案:

答案 0 :(得分:0)

如果要在服务器和客户端之间共享类型和类,则必须将它们放入单独的程序集中,并在服务器和客户端上使用它。这仅适用于控制电线的两端,例如写代码的服务器端和客户端(我相信你是)。

如果在服务器端创建单独的MyWCFTypes程序集,则也可以在客户端项目中引用该程序集,并且在导入服务定义时,WCF应该重用现有的类,例如:应该重用您的MyWCFTypes类而不为相同的枚举创建新类。

相关问题