WCF WSDL предлагает только сложные типы / методы

#c# #wcf #wsdl #gsoap

#c# #wcf #wsdl #gsoap

Вопрос:

Я нашел свой путь к 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) Возможно ли это?

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

Ответ №1:

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

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

Поэтому вместо

 void YourOperation (YourObject request)
  

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

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

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

Комментарии:

1. Но я просто объявил int Add(int a, int b) метод и запустил на нем gSOAP. Поэтому я не использовал сложные типы!

Ответ №2:

Ответ №3:

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

Ответ №4:

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

 string GetData(int value)
  

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

 var service = new ServiceReference1.Service1Client();
var reslut = service.GetData(4);