Я пытаюсь отправить конверт SOAP непосредственно в веб-службы Dynamics NAV с помощью HttpWebRequest, HttpWebResponse.
Код:
private void button1_Click(object sender, EventArgs e)
{
string requestString = LoadData();
HttpWebRequest request;
HttpWebResponse response = null;
string url = "http://localhost:7047/DynamicsNAV70/WS/Page/nav_Item";
byte[] requestBuffer = null;
Stream postStream = null;
Stream responseStream = null;
StreamReader responseReader = null;
request = (HttpWebRequest)WebRequest.Create(url);
request.ProtocolVersion = new Version(1,1);
request.Method = "POST";
//request.Headers.Add("SOAPAction", @"urn:microsoft-dynamics-schemas/page/nav_item:create");
request.Headers.Add("Action", @"urn:microsoft-dynamics-schemas/page/nav_item");
//request.Headers.Add("Content-Type", @"text/xml; charset=utf-8");
request.ContentType = @"application/xml; charset=utf-8";
requestBuffer = Encoding.ASCII.GetBytes(requestString);
request.ContentLength = requestBuffer.Length;
request.UseDefaultCredentials = true;
postStream = request.GetRequestStream();
postStream.Write(requestBuffer, 0, requestBuffer.Length);
postStream.Close();
response = (HttpWebResponse)request.GetResponse();
responseStream = response.GetResponseStream();
string response_result=string.Empty;
if (responseStream != null)
{
responseReader = new StreamReader(responseStream);
response_result = responseReader.ReadToEnd();
}
MessageBox.Show(response_result);
}
private string LoadData()
{
// throw new NotImplementedException();
XmlDocument oCustomer = new XmlDocument();
oCustomer.Load(@"C:\Users\kishore.LOCAL.000\Desktop\NAV_DEMO\NAV_DEMO\bin\Debug\input\item.xml");
return oCustomer.InnerXml;
}
Формат SOAP Envelope приведен ниже:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins="urn:microsoft-dynamics-schemas/page/nav_item">
<soapenv:Header/>
<soapenv:Body>
<ins:Create>
<ins:nav_Item>
<!--Optional:-->
<ins:Key>?</ins:Key>
<!--Optional:-->
<ins:No>1234</ins:No>
<!--Optional:-->
<ins:Description>Test Item</ins:Description>
</ins:nav_Item>
</ins:Create>
</soapenv:Body>
</soapenv:Envelope>
Но когда я пытаюсь получить ответ без заголовка в HttpWebRequest, он возвращает всю веб-службу в формате xml со статусом OK, но элемент не вставляется в NAV.
Когда я пытаюсь получить ответ с заголовком в HttpWebRequest, его {"Удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера". System.Net.WebExceptionStatus.ProtocolError}
Я хочу создать элемент в NAV, используя мыльный конверт, а не напрямую ссылаясь на сервис.
Любая помощь будет мне полезна.
С уважением Кишор К.