2015-11-07 59 views
2

我调用一个Web服务的方法,将一个包含对象数组的类作为参数。带有对象数组的Web服务调用方法

Inquiry obj = new Inquiry 
{ 
    Items = new Test.Items[] 
    { 
     new Test.Items{ Id="1"}, 
     new Test.Items{ Id="2"}, 
     new Test.Items{ Id="3"}, 
    } 
}; 
client.TestMethod(ref obj); 

如果我只传递Items数组中的一个项目,一切正常。当我传递两个或更多项目时,我得到一个System.ServiceModel.FaultException,其中 消息:Imp。线已经存在。标识字段和值:导入过程代码='',UID ='',行号='0' 我认为xml或soap序列化的复杂类型是错误的。

<basicHttpBinding> 
<binding name="WEBInquiry_Binding"> 
    <security mode="Transport"> 
    <transport clientCredentialType="Ntlm" proxyCredentialType="None" realm=""/> 
    <message clientCredentialType="UserName" algorithmSuite="Default"/> 
    </security> 
</binding> 

有什么事情,我必须在代码或配置变化? 谢谢

编辑 的FaultException有一个代码属性与名称和命名空间成员

名称= Microsoft.Dynamics.Nav.Types.Exceptions.NavCSideException

命名空间=瓮:微软动态,架构/错误

+0

您是否使用Microsoft Dynamics Nav?看起来错误来自那里。如果是这样的话,听起来像是他们软件中的一个错误,你应该在他们的支持论坛上询问。 –

+0

@ShadowWizard是的,我更新了问题 – albert

+0

同意wirh @wizard,错误来自Nav内。所以你需要检查/调试处理请求的代码单元。你确定ws可以处理数组吗?你能发布ws或这个特定请求的wsdl吗?绑定似乎在这里的意义。 –

回答

2

原因是您要将数据导入Imp。线表。在NAV中,“Line”类型表的主键通常是行号(这只是一个整数运行号)。所以你有三个选择: - 你需要从你的代码填充行号,以使记录独特 - 有人需要改变另一侧的表结构以使主键AutoIncremented - 你必须通过你的数组项目一个接一个