通过Web服务访问Navision代码单元(xml)

时间:2013-05-16 08:55:38

标签: web-services soap dynamics-nav navision

我尝试通过从C#生成SOAP消息来访问Navision 2009 R2 Web服务。只有当我调用的codeunit函数没有参数时,我才得到响应。

codeunit的示例 RunJob 函数测试(无参数,返回硬编码字符串):

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Test xmlns="urn:microsoft-dynamics-schemas/codeunit/runjob">
</Test>
</soap:Body>
</soap:Envelope>

结果我得到那个字符串......

相同代码单元 RunJob 函数 RunJob 的示例(采用名为 parameter 的1个字符串参数,返回内部服务器错误):

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<RunJob xmlns="urn:microsoft-dynamics-schemas/codeunit/runjob">
<parameter>aaaa</parameter>
</RunJob>
</soap:Body>
</soap:Envelope>

结果我得到了错误( WebResponse wr = request.GetResponse(); )而不是所需的信息。

最有趣的是它之前有效。唯一的变化(就我而言) - 安装了NAV 2013.

有没有人遇到过同样的问题或知道解决方案?

P.S。 以下是RunJob函数的Web服务定义的一部分:

<element name="Runjob">
<complexType>
<sequence>
<element minOccurs="1" maxOccurs="1" name="parameter" type="string"/>
</sequence>
</complexType>
</element>
<element name="Runjob_Result">
<complexType>
<sequence>
<element minOccurs="1" maxOccurs="1" name="return_value" type="string"/>
</sequence>
</complexType>
</element>

2 个答案:

答案 0 :(得分:1)

关于函数/变量命名的全部内容。 函数的每个参数的第一个字母应该是小的一个。 SOAP主体应该是这样的(“codeunit”是小写的,但它的名字在NAV中公开)

<RunJob xmlns="urn:microsoft-dynamics-schemas/codeunit/RunJob">
...params...
</RunJob>

Request标头(小写的codeunit名称,函数名称原样)

"urn:microsoft-dynamics-schemas/codeunit/runjob:RunJob"

答案 1 :(得分:0)

这听起来很尴尬,但试着把

<soap:Body><RunJob xmlns="urn:microsoft-dynamics-schemas/codeunit/runjob">

单行,即BodyRunJob之间没有回车。