Можно ли использовать универсальный DataContract со стороны клиента? - PullRequest
3 голосов
/ 14 июля 2011

Я знаю, что когда вы создаете сервис, вы можете создать общий DataContract:

[DataContract(Name = "Get{0}Request")
public sealed class GetItemRequest<T>
    where T : class, new() { ... }

[DataContract(Name = "Get{0}Response")
public sealed class GetItemResponse<T>
    where T : class, new() { ... }

[ServiceContract]
public void MyService : IMyService
{
    [OperationContract]
    GetItemResponse<Foo> GetItem(GetItemRequest<Foo> request);
}

Это генерирует определения GetFooRequest и GetFooResponse для моего WSDL.Что меня интересует, так это то, можно ли идти в другом направлении?

Можно ли создать клиент, который использует общие DataContracts, и передать их на сервер как конкретный объект?Я попытался сделать это после добавления ссылки на сервис, и это не очень хорошо сработало.Так что меня больше интересует, есть ли способ (даже если это означает не добавлять ссылку на сервис) для этого?

1 Ответ

3 голосов
/ 14 июля 2011

В конечном итоге WCF рассмотрит класс контракта.Если это сгенерировано из WSDL / MEX, у него этого не будет (поскольку это не так, как это выражается в метаданных) - но если у вашего клиента есть код, как указано выше, то он должен работать нормально.

Если вы добавите ссылку библиотеки (т. Е. Ссылку dll / проекта) на dll dll от клиента и убедитесь, что в WCF включены общие сборки, она должна работать.Если он все еще не работает, то чит: используйте сервисную ссылку только для получения данных конфигурации .Затем удалите ссылку на службу, но сохраните конфигурацию (в противном случае эти файлы конфигурации являются проблемой).Затем должен найти тип из библиотеки.

...