WCF WSDL предлагает только сложные типы / методы - PullRequest
1 голос
/ 20 октября 2011

Я нашел свой путь в WCF + WSDL. Он отлично работает в первом примере с gSOAP и axis2. Но я также столкнулся с одной проблемой:

Когда я смотрю на мой WSDL, он всегда использует сложные типы (запрос и ответ) для удаленных вызовов процедур.

<xsd:element name="AddResponse">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element minOccurs="0" name="AddResult" type="xsd:double"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

Поэтому я должен вызвать метод Add с двумя аргументами proxy.Add(request, response), а затем извлечь фактическое возвращаемое значение double result = reponse.Result.

Я хотел бы получить это более прямо. Например, double result = proxy.Add(1, 2). Это возможно?

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 10 июля 2012

Да, вы можете использовать ваш сервис таким образом, и это способ по умолчанию. Просто добавьте новый проект в ваше решение, используя шаблон приложения-службы WCF. Встроенный в этот шаблон пример сервиса содержит такой метод:

string GetData(int value)

Не меняя ничего, постройте этот проект, и WSDL будет создан для вас. Затем в другом проекте просто выберите из контекстного меню Добавить ссылку на службу -> Обнаружить, выберите найденное и нажмите ОК. Прокси-классы будут сгенерированы в вашем проекте, и вы можете вызвать его:

var service = new ServiceReference1.Service1Client();
var reslut = service.GetData(4);
1 голос
/ 05 июля 2012
1 голос
/ 06 июля 2012

Созданный WSDL представляет собой XSD (определение схемы XML) и там он определяет все методы и типы.
Если вы прочитаете следующую страницу , вы увидите, что сложный тип необходим для созданияновые элементы или атрибуты.
А чтобы связаться со службой WCF, вы можете добавить ссылку на Службу в других проектах C # в службу WCF, а затем работать с обычными объектами и методами.

1 голос
/ 03 июля 2012

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

Если вы не хотите создавать сложный тип, вам нужно будет передавать параметры индивидуально.

Так что вместо

void YourOperation (YourObject request)

Вам нужно будет сделать (например)

void YourOperation (int param1, string param2, ...)

если ответ представляет собой одно значение типа данных (int, string и т. Д.), Он будет делать то же самое и не будет создавать сложный тип. Если ваш ответ содержит более одного значения, то, когда вы создаете класс в качестве возвращаемого объекта, он будет представлять его как сложный тип.

...