WCF Сервисный контракт - PullRequest
       20

WCF Сервисный контракт

1 голос
/ 24 августа 2011

У меня проблема с использованием пользовательского типа данных в методе службы WCF, ниже приведен пример кода

[ServiceContract()]
public class SampleServise : ISampleServise
{
    void object GetSomething(ICustomData objectData)
    {
       // Do Something
    }
}

Что мне делать с интерфейсом класса ICustomData?

Спасибо, Афшин

1 Ответ

2 голосов
/ 24 августа 2011

WCF основан на передаче сообщений, и эта передача сообщений моделируется с использованием схемы XML (XSD). Таким образом, все, что может быть выражено в схеме XML, может использоваться в WCF.

Это также означает, что интерфейсы не поддерживаются. Вам необходимо использовать фактические конкретные типы для параметров в ваших сервисных методах WCF.

В вашем случае создайте конкретный класс, который реализует ICustomData, а затем используйте этот класс в качестве типа параметра.

В качестве справочного материала прочитайте MSDN Designing Contracts , в котором указаны параметры:

Параметры и возвращаемые значения

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

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

...