Показать сообщение отдельно
Старый 31.07.2011, 21:16   #3  
AS850 is offline
AS850
Участник
 
13 / 10 (1) +
Регистрация: 14.08.2009
Продолжение истории:

удалось добиться ответа от NAV, используя 1-й вариант кода. Вскрылась одна проблема. Приведу код на С#, содержание запроса и ответа сервисов: тестового и NAV сервиса.

Тестовый сервис:

Код на C#:
Код:
var content = File.ReadAllText(@"e:\xml\test-service.txt").Trim();
var address = "http://localhost:6700/businesspartnerdata";
   
var client = new WebClient();
client.Credentials = CredentialCache.DefaultNetworkCredentials;
client.Headers.Add(HttpRequestHeader.ContentType, "xmlmsg/http");
client.Headers.Add("SOAPAction", "urn://localhost:6700/businesspartnerdata:AliveTest");

var result = client.UploadString(address, content);

textBox1.Text = result;
Содержимое файла test-service.xml - запрос:
[xml]
<?xml version="1.0" encoding="UTF-8"?>
<MESSAGE DTD="XMLMSG" VERSION="1.4.0.0">
<COMMAND>
<REQUEST NAME="AliveTest" DTD="" VERSION="" ID="20031107102901"/>
</COMMAND>
</MESSAGE>
[/xml]

Ответ полученный от тестового сервиса системы "Х":
[xml]
<?xml version="1.0" encoding="UTF-8"?>
<MESSAGE DTD="XMLMSG" VERSION="1.4.0.0">
<RESULT>
<RESPONSE DTD="" ID="20031107102901" NAME="AliveTest" VERSION="">
<DATA>
<APPLICATION HOSTNAME="lae-vp" NAME="X" VENDOR="Vendor" VERSION="2.0.1.2"/>
<SERVICE DTD="BusinessPartnerData" NAME="BusinessPartnerData" VERSION="1.0.0.0">
<METHOD VERSION="1.0.0.0">GetEntry</METHOD>
<METHOD VERSION="1.0.0.0">UpdateEntry</METHOD>
<METHOD VERSION="1.0.0.0">AliveTest</METHOD>
<METHOD VERSION="1.0.0.0">Subscription</METHOD>
<METHOD VERSION="1.0.0.0">NewEntry</METHOD>
</SERVICE>
</DATA>
</RESPONSE>
</RESULT>
</MESSAGE>
[/xml]

NAV сервис:

Код на C#:
Код:
var content = File.ReadAllText(@"e:\xml\nav-service.txt").Trim();
var address = "http://localhost::7047/DynamicsNAV/WS/DEMO/Codeunit/BusinessPartnerData";
   
var client = new WebClient();
client.Credentials = CredentialCache.DefaultNetworkCredentials;
client.Headers.Add(HttpRequestHeader.ContentType, "text/xml");
client.Headers.Add("SOAPAction", "urn://localhost:7047/DynamicsNAV/WS/DEMO/Codeunit/BusinessPartnerData:AliveTest");

var result = client.UploadString(address, content);

textBox1.Text = result;
Содержимое файла nav-service.xml - запрос:
[xml]
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<AliveTest xmlns="urn:microsoft-dynamics-schemas/codeunit/BusinessPartnerData"><aliveTestResponse /></AliveTest>
</soap:Body></soap:Envelope>
[/xml]

Ответ полученный от NAV сервиса:
[xml]
<Soap:Envelope xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/">
<Soap:Body>
<AliveTest_Result xmlns="urn:microsoft-dynamics-schemas/codeunit/BusinessPartnerData">
<aliveTestResponse DTD="XMLMSG" VERSION="1.4.0.0">
<RESULT xmlns="urn:microsoft-dynamics-nav/xmlports/x50000">
<RESPONSE NAME="AliveTest" DTD="BusinessPartnerData" VERSION="1.4.0.0" ID="1">
<DATA>
<APPLICATION HOSTNAME="lae-vp" NAME="NAV" VERSION="6.2.0.1" VENDOR="NAV"/>
<SERVICE NAME="BusinessPartnerData" DTD="BusinessPartnerData" VERSION="0.0.0.1">
<METHOD METHOD="AliveTest" VERSION="0.0.0.1"/>
<METHOD METHOD="GetEntry" VERSION="0.0.0.1"/>
<METHOD METHOD="NewEntry" VERSION="0.0.0.1"/>
<METHOD METHOD="UpdateEntry" VERSION="0.0.0.1"/>
</SERVICE>
</DATA>
</RESPONSE>
</RESULT>
</aliveTestResponse>
</AliveTest_Result>
</Soap:Body>
</Soap:Envelope>
[/xml]

Как видно код отличается одной строчкой:
Код:
client.Headers.Add(HttpRequestHeader.ContentType, "xmlmsg/http");
и
Код:
client.Headers.Add(HttpRequestHeader.ContentType, "text/xml");
Еще отличаются форматы запросов и ответов.

Вопросы:
1. Можно ли настроить NAV принимать и отвечать в том же формате, что и тестовый сервис системы "Х"?
2. Как передать xml запрос в NAV? Через тот же XMLport в параметрах метода или можно создать еще один параметр? Как данный механизм работает?


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

С уважением
Алексей