我不知道是否有可能,但我希望能夠從我的客戶端WCF服務中引用枚舉。我有一個核心項目,在該項目中的枚舉是:從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文件,如果有可能跳過它。我使用net.tcp綁定的服務。希望這是可以理解的,謝謝你的幫助:)
感謝您的回答。我們考慮過將它放在單獨的程序集中,現在它可以正常工作,因爲正如您所提到的,我們控制着服務器和客戶端。但是,將來服務可能會完全公開,然後我們不希望使用服務的其他客戶依賴於單獨的類型組合。那可能嗎? – WcfEnum 2010-03-09 15:34:11
@WcfEnum:否,如果您不能共享公共程序集,則無法使客戶端使用服務器類型。當添加服務引用時,他們將獲得他們自己的單獨類型的副本。 – 2010-03-09 16:55:54