Передача атрибутов DataContracts в WCF
-
18-09-2019 - |
Вопрос
У меня есть контракт данных, в котором есть важные атрибуты.Например, в следующем коде:
[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 это работает по-другому.
Марк