我尝试通过从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>
答案 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">
单行,即Body
和RunJob
之间没有回车。