Параметры SOAP, переданные в Nav 2013 R2, вызывают ошибку, как если бы они были нулевыми.

Я пытаюсь вызвать модуль кода веб-службы Nav 2013 R2 с помощью пользовательской команды SOAP и получаю ответ, указывающий, что передаваемые параметры равны нулю, а это не так.

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

Вот запрос SOAP:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><TransferOrderCreate xmlns="urn:microsoft-dynamics-schemas/Codeunit/WebTestCodeunit"><ptext>this is some text</ptext><pint>999</pint></TransferOrderCreate></soap:Body></soap:Envelope>

Вот ответ SOAP:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="urn:microsoft-dynamics-schemas/error">a:Microsoft.Dynamics.Nav.Service.WebMetadata.ServiceBrokerException</faultcode><faultstring xml:lang="en-CA">Parameter ptext in method TransferOrderCreate in service WebTestCodeunit is null! </faultstring><detail><string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Parameter ptext in method TransferOrderCreate in service WebTestCodeunit is null! </string></detail></s:Fault></s:Body></s:Envelope>

Вот сервис, предоставленный Nav:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:microsoft-dynamics-schemas/codeunit/WebTestCodeunit" targetNamespace="urn:microsoft-dynamics-schemas/codeunit/WebTestCodeunit" debug="true">
<script id="FirebugLite" firebugIgnore="true" extension="Chrome"/>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:microsoft-dynamics-schemas/codeunit/WebTestCodeunit">
<element name="TransferOrderCreate">
<complexType>
<sequence>
<element minOccurs="1" maxOccurs="1" name="ptext" type="string"/>
<element minOccurs="1" maxOccurs="1" name="pint" type="int"/>
</sequence>
</complexType>
</element>
<element name="TransferOrderCreate_Result">
<complexType>
<sequence>
<element minOccurs="1" maxOccurs="1" name="return_value" type="string"/>
</sequence>
</complexType>
</element>
</schema>
</types>
<message name="TransferOrderCreate">
<part name="parameters" element="tns:TransferOrderCreate"/>
</message>
<message name="TransferOrderCreate_Result">
<part name="parameters" element="tns:TransferOrderCreate_Result"/>
</message>
<portType name="WebTestCodeunit_Port">
<operation name="TransferOrderCreate">
<input name="TransferOrderCreate" message="tns:TransferOrderCreate"/>
<output name="TransferOrderCreate_Result" message="tns:TransferOrderCreate_Result"/>
</operation>
</portType>
<binding name="WebTestCodeunit_Binding" type="tns:WebTestCodeunit_Port">
<binding xmlns="http://schemas.xmlsoap.org/wsdl/soap/" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="TransferOrderCreate">
<operation xmlns="http://schemas.xmlsoap.org/wsdl/soap/" soapAction="urn:microsoft-dynamics-schemas/codeunit/WebTestCodeunit:TransferOrderCreate" style="document"/>
<input name="TransferOrderCreate">
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
</input>
<output name="TransferOrderCreate_Result">
<body xmlns="http://schemas.xmlsoap.org/wsdl/soap/" use="literal"/>
</output>
</operation>
</binding>
<service name="WebTestCodeunit">
<port name="WebTestCodeunit_Port" binding="tns:WebTestCodeunit_Binding">
<address xmlns="http://schemas.xmlsoap.org/wsdl/soap/" location="http://lt0619.xx.xxxxxxxxx.xx:11047/Trunk/WS/7002/Codeunit/WebTestCodeunit"/>
</port>
</service>
</definitions>

person Doug J. Huras    schedule 10.09.2015    source источник
comment
Боюсь, я задаю один и тот же вопрос в каждом посте о Nav WS. Вы пытались использовать wsdl вашего сервиса с чем-то вроде SOAPui и позволить ему создавать для вас действительные запросы мыла? Я не вижу, если что-то не так с вашим запросом, но тем не менее.   -  person Mak Sim    schedule 12.09.2015
comment
Спасибо. В основном я использую веб-отладчик Fiddler. Когда я отслеживаю сообщения из браузера с помощью Fiddler, я вижу нулевую ошибку. При попытке отправить сообщение непосредственно из Fiddler я получаю 401 неавторизованный ответ. Я все еще пытаюсь выяснить настройку Fiddler, чтобы обойти эту ошибку, чтобы добраться до моей ошибки.   -  person Doug J. Huras    schedule 14.09.2015
comment
Не знаю, может ли Fiddler обрабатывать NTLM. Некоторое время назад мне удалось обработать авторизацию в SOAPui. Это приложение может отправить запрос на ваш WS, и вы сможете отслеживать его с помощью Fiddler, если все еще будет нулевая ошибка. Если нет, вы получите правильный запрос и отправите его с тем, что вы используете.   -  person Mak Sim    schedule 15.09.2015


Ответы (1)


Проверьте пространства имен в определении wsdl и ваш запрос. Пространства имен чувствительны к регистру.

wsdl:

urn: microsoft-dynamics-schemas/codeunit/WebTestCodeunit

запрос:

urn: microsoft-dynamics-schemas/Codeunit/WebTestCodeunit

Это может вызвать исключение, которое вы видите.

person Alexander Drogin    schedule 14.09.2015
comment
Спасибо за вашу помощь! В этом была проблема. Сообщение об ошибке действительно поставило меня на неверный путь. Теперь я могу двигаться вперед и использовать эти знания с пользой. Спасибо еще раз. - person Doug J. Huras; 15.09.2015