我不知道是否可能,但我希望能够在客户端引用我的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绑定服务。希望这是可以理解的,感谢任何帮助:)
答案 0 :(得分:0)
如果要在服务器和客户端之间共享类型和类,则必须将它们放入单独的程序集中,并在服务器和客户端上使用它。这仅适用于控制电线的两端,例如写代码的服务器端和客户端(我相信你是)。
如果在服务器端创建单独的MyWCFTypes
程序集,则也可以在客户端项目中引用该程序集,并且在导入服务定义时,WCF应该重用现有的类,例如:应该重用您的MyWCFTypes
类而不为相同的枚举创建新类。