Отображение перечислений на стороне клиента из службы wcf - PullRequest
1 голос
/ 09 марта 2010

Я не знаю, возможно ли это, но я хочу иметь возможность ссылаться на перечисления из моей службы 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

когда я вызываю метод, который принимает или возвращает enum, он работает нормально, но мне нужно обратиться к базовому проекту в клиентском проекте, чтобы использовать клиентскую часть enums, я хотел бы сделать это из Сервиса если это возможно.

Я попытался установить перечисления в базовом проекте на

[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 для службы. Надеюсь, это было понятно, спасибо за любую помощь:)

1 Ответ

0 голосов
/ 09 марта 2010

Если вы хотите разделить типы и классы между сервером и клиентом, вы должны поместить их в отдельную сборку и использовать их как на стороне сервера, так и на стороне клиента. Это работает, только если вы контролируете оба конца провода, например, напишите код как на стороне сервера, так и на стороне клиента (как я полагаю, вы).

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

...