2013-05-16 63 views
0

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

举例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> 

至于结果我得到的字符串...

举例相同codeunit RunJob函数RunJob(以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();)而不是所需的信息。

最有趣的是它的工作原理。唯一的变化(就我而言) - 2013年安装了NAV。

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

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

这完全是关于函数/变量的命名。 函数的每个参数的第一个字母应该是小的。 SOAP主体应该是这样的(“codeunit”是小写的,但它的名称是如NAV曝光)

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

请求头(codeunit名小写,函数名,因为它是)

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

它听起来别扭,但尝试把

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

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

+0

我把整个请求写在一行中。上例中的车厢只是为了便于阅读。 – user1390456

+0

在大多数情况下,http 500意味着请求出现问题。尝试使用任何耗用ws的工具(如SOAPui)来生成示例请求。每晚构建的soapui可以与导航和NTLM身份验证一起使用。 –

+0

是的,我确实使用SOAPui,我的问题中的XML片断是从那里获取的(我使用SOAPui获取/请求的请求/答案都等于从C#发出的请求/答案)。 早些时候(〜2个月前),SOAPui可以成功处理函数参数的传输并从WS中获得正确答案。我无法想象出了什么问题:C#代码和其他任何内容都没有改变,我只是把这个项目放在一边,当我回到它的时候,带参数的函数停止工作。唯一发生的事情 - 在“暂停”期间将NAV 2013与NAV 2009 R2并行安装 – user1390456