ASP.NET WebService без сложных типов - PullRequest
0 голосов
/ 27 января 2009

Я пытаюсь создать веб-сервис с ASP, которому будут заданы три параметра: строка, дата / время и другая строка. После создания метода wsdl содержит следующее:

<s:element name="TimesheetAudit">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="employeeNumber" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="periodEndDate" type="s:dateTime"/>
<s:element minOccurs="0" maxOccurs="1" name="timesheet" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>

Черный ящик, вызывающий мой веб-сервис, жалуется на несоответствие в количестве параметров. Я предполагаю, что это потому, что мой веб-метод технически принимает 1 параметр, сложный тип, а не три.

Это проблема? Если так, что я могу сделать, чтобы преодолеть это?

Редактировать: в этом случае потребитель является черным ящиком, я должен сформировать свой веб-сервис в соответствии с абонентом. Добавление

[SoapDocumentMethod(ParameterStyle = SoapParameterStyle.Bare)]
к моей подписи метода приводит к следующей ошибке:
' does not conform to WS-I Basic Profile v1.1. Please examine each of the normative statement violations below. To turn off conformance check set the ConformanceClaims property on corresponding WebServiceBinding attribute to WsiClaims.None.
R2204: A document-literal binding in a DESCRIPTION MUST refer, in each of its soapbind:body element(s), only to wsdl:part element(s) that have been defined using the element attribute. 
  -  Part 'input' of message 'TimesheetAuditSoapIn' from service description with targetNamespace='<a href="http://www.netdes.com/" rel="nofollow noreferrer">http://www.netdes.com/</a>'.
  -  Part 'TimesheetAuditResult' of message 'TimesheetAuditSoapOut' from service description with targetNamespace='<a href="http://www.netdes.com/" rel="nofollow noreferrer">http://www.netdes.com/</a>'.

Ответы [ 2 ]

1 голос
/ 27 января 2009

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

По умолчанию веб-служба ASP.NET использует стиль параметров «Wrapped», что означает, что все параметры заключены в один элемент, который отправляется внутри тела SOAP.

Вы можете изменить объявление метода, чтобы использовать стиль параметра «Bare», который помещает все параметры непосредственно в тело SOAP, без элемента-оболочки. Это достигается с помощью свойства ParameterStyle в SoapDocumentMethodAttribute веб-метода.

Подробнее см. в этой записи MSDN .


В ответ на ошибку соответствия: Вы можете отключить проверку соответствия WS-I, добавив в файл web.config следующее:

<configuration>
  <system.web>
    <webServices>
      <conformanceWarnings>
        <remove name='BasicProfile1_1'/>
      </conformanceWarnings>
    </webServices>
  </system.web>
</configuration>

Соответствие, как правило, хорошо, но это не обязательно. Поскольку в этом случае вы не контролируете определение, у вас нет большого выбора.

Также возможно, что клиент ожидает веб-сервис в стиле RPC вместо веб-сервиса в стиле документа. (Это будет контролироваться с помощью SoapRpcMethodAttribute вместо SoapDocumentMethodAttribute.) Если вам все еще не повезло после отключения предупреждения о соответствии, вы можете попробовать изменить стиль RPC и посмотреть, работает ли это.

И если есть какой-то способ, которым вы можете получить определение (либо источник, либо, еще лучше, WSDL, использованный для создания источника) для клиента, чтобы вы могли сказать, чего именно он ожидает, это поможет. Если вы можете получить WSDL, вы можете заставить .NET сгенерировать для вас метод веб-службы в правильном формате.

0 голосов
/ 28 января 2009

Звучит так, будто вы один из создателей хостинга веб-сервисов, так что вы можете запустить шоу, верно?

Если вы можете запустить Visual Studio, нажать «Файл», «Новый веб-сайт», добавить к нему веб-службу, использовать автоматически сгенерированный WSDL и успешно подключиться к нему из тестового жгута, тогда пользователь этой веб-службы должен читать тот же WSDL и подключаться к нему, как и вы. Важно то, что у вас есть тестовая система, которая работает.

Если это так, то проблема черного ящика лежит на их конце провода, а не на вашем.

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