0

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

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

<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的示例(采用 1 个名为parameter的字符串参数,返回内部服务器错误):

<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。

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

PS 下面是 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>
4

2 回答 2

1

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

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

请求标头(小写的代码单元名称,函数名称原样)

"urn:microsoft-dynamics-schemas/codeunit/runjob:RunJob"
于 2013-09-26T08:10:04.790 回答
0

It sound awkward but try to put

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

in single line, i.e. no carriage return between Body and RunJob.

于 2013-06-21T07:49:49.740 回答