Вопрос

У меня есть контракт данных, в котором есть важные атрибуты.Например, в следующем коде:

[DataMember]
[Description("My Description")]
public string Name { get; set; }

Я хочу, чтобы атрибут «Описание» автоматически создавался на клиентском прокси-сервере.

Есть ли какое-либо решение или обходные пути, кроме массового дублирования?

Большое спасибо!

Это было полезно?

Решение

Вы этого не делаете, не совсем.Помните, что вы передаете не экземпляры объектов, а текстовые сообщения.

Если это действительно важно, вы можете отказаться от сгенерированных прокси-классов и вместо этого поделиться реализацией объектов данных и контрактов, однако это требует гораздо больше работы, и, конечно, вы рискуете рассинхронизировать клиент и сервер.

Если вы хотите попробовать это, поместите свои контракты и интерфейс операций в отдельную сборку с общедоступными модификаторами, а затем попробуйте следующее

Binding binding = new BasicHttpBinding(); // or which one you 
EndpointAddress endpoint = 
    new EndpointAddress("endpointUrl");
ChannelFactory<IServiceInterface> channelFactory = 
    new ChannelFactory<IServiceInterface>(binding, endpoint);

IServiceInterface client = channelFactory.CreateChannel();
MyDataType result = client.Operation(myOtherDataType);

((IClientChannel)client).Close();

Другие советы

Вероятно, вам придется углубиться в создание описания службы (и полученного файла WSDL), чтобы передать эти атрибуты в такой форме, чтобы клиент мог их обнаружить и воссоздать.Почти невозможно, правда.

Плюс:помните, что WCF спроектирован так, чтобы обеспечить совместимость — что на самом деле должен делать клиент Java или PHP с этими атрибутами?

Сервис-ориентированное программирование сильно отличается от «обычных» компонентных или объектных систем.Все, что вы делаете, это в основном передаете сообщения в текстовом или двоичном формате.Это действительно ограничивает некоторые вещи, к которым вы, возможно, привыкли при работе с объектами и компонентами на основе .NET — просто в мире SOA это работает по-другому.

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top