![]() |
#3 |
Участник
|
Продолжение истории:
удалось добиться ответа от 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; [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; [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 в параметрах метода или можно создать еще один параметр? Как данный механизм работает? Заранее спасибо. С уважением Алексей |
|