Web services 通过web服务(xml)访问Navision codeunit

Web services 通过web服务(xml)访问Navision codeunit,web-services,soap,dynamics-nav,navision,Web Services,Soap,Dynamics Nav,Navision,我试图通过从C#生成SOAP消息来访问Navision 2009 R2 web服务。只有当我调用的codeunit函数没有参数时,我才会得到响应 codeunit运行作业函数测试示例(无参数,返回硬编码字符串): 结果我得到了那个字符串 同一codeunit RunJob函数RunJob的示例(采用1个名为parameter的字符串参数,返回内部服务器错误): aaaa 结果我得到了错误(WebResponse wr=request.GetResponse();),而不是所需的信息 最有

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

codeunit运行作业函数测试示例(无参数,返回硬编码字符串):


结果我得到了那个字符串

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


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

最有趣的是,它以前是有效的。唯一的变化(与我一样)-NAV 2013已安装

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

附言。 以下是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>

听起来很尴尬,但试着把

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


在单行中,即
Body
RunJob
之间没有回车符,这都是关于函数/变量的命名。 函数的每个参数的第一个字母都应该是小字母。 SOAP主体应该是这样的(“codeunit”是小写的,但它的名称在NAV中是公开的)


我把整个请求写在一行中。上面例子中的车厢只是为了便于阅读。Http 500在大多数情况下意味着请求有问题。尝试使用任何ws-consuming工具(如SOAPui)生成示例请求。soapui的夜间构建可以与Nav ws和NTLM auth一起使用。是的,我确实使用soapui,我问题中的XML片段取自那里(我使用soapui所做/得到的两个请求/答案都等于从C#发出的请求/答案)。而更早的时候(大约2个月前),SOAPui可以成功地处理函数参数的传输,并从WS获得正确的答案。我无法想象出哪里出了问题:C#代码和其他任何东西都没有改变,我只是把那个项目放在一边,当我回到项目中时,带参数的函数停止工作。唯一发生的事情是,在“暂停”期间,NAV 2013与NAV 2009 R2并行安装,可能是Nav7安装的服务刚刚用相同的名称覆盖了您的服务,而现在您使用的web服务是错误的?或者它们共享相同的端口,这就是导致错误的原因。尝试使用soapui重新使用wsdl。还可以尝试重新编译Nav codeunit。如果您使用了一些自动化变量,然后卸载了所需的库,那么它可能无法正常工作。如果没有任何效果,您可以使用调试模式生成c#代码并调试您的特定请求,以查看它在何处崩溃。
<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>
<soap:Body><RunJob xmlns="urn:microsoft-dynamics-schemas/codeunit/runjob">
<RunJob xmlns="urn:microsoft-dynamics-schemas/codeunit/RunJob">
...params...
</RunJob>
"urn:microsoft-dynamics-schemas/codeunit/runjob:RunJob"