HttpWebRequest、HttpWebResponse を使用して、SOAP エンベロープを Dynamics NAV Web サービスに直接投稿しようとしています。
コード:
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 エンベロープの形式は次のとおりです。
<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 でヘッダーなしで応答を取得しようとすると、Web サービス全体が xml 形式でステータス OK で返されますが、アイテムが NAV に挿入されません。
HttpWebRequest でヘッダー付きの応答を取得しようとすると、{"リモート サーバーがエラーを返しました: (500) 内部サーバー エラーです。" System.Net.WebExceptionStatus.ProtocolError}
サービスを直接参照するのではなく、石鹸封筒を使用して NAV にアイテムを作成したい。
どんな助けでも私に役立ちます。
よろしくキショアK