Передача атрибутов в DataContracts в WCF - PullRequest
2 голосов
/ 22 июля 2009

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 22 июля 2009

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

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

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

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();
0 голосов
/ 22 июля 2009

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

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

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

Марк

...