.NET SOAP消费-';无法取消聚合类型';
本文关键字:取消 类型 消费 SOAP NET | 更新日期: 2023-09-27 18:26:24
我正在尝试使用此处公开的Voxbone服务:http://sandbox.voxbone.com/VoxAPI/services/VoxAPI?wsdl
所以我所做的是添加一个新项目,右键单击-添加服务引用
从那里,生成了一堆代码,我得到了我需要的对象。然而,当调用某些函数(其中一些函数可以工作)时,我收到错误:
Could not unmarshall type : cvc-minExclusive-valid: Value '0' is not facet-valid with respect to minExclusive '0' for type 'ID'.
我想这与ID属性有关。。。但老实说,这对我来说很神秘。我试过在谷歌上搜索,但没有用。如有任何见解,我们将不胜感激。
StackTrace:
Server stack trace:
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at Api.Voxbone.VoxboneService.VoxAPIIntf.GetDIDGroupList(GetDIDGroupListRequest request)
at Api.Voxbone.VoxboneService.VoxAPIIntfClient.Api.Voxbone.VoxboneService.VoxAPIIntf.GetDIDGroupList(GetDIDGroupListRequest request) in {FileSystem}'Reference.cs:line 7471
at Api.Voxbone.VoxboneService.VoxAPIIntfClient.GetDIDGroupList(GetDIDGroupList GetDIDGroupList1) in {FileSystem}'Reference.cs:line 7477
at Api.Voxbone.VBService.GetDIDGroups() in {FileSystem}/VBService.cs:line 60
The '{FileSystem}' was snipped for privacy.
在WSDL中搜索minExclusive
。它在一条评论下面,上面写着<!-- RESTRICTIONS -->
。您将看到<xsd:minExclusive value="0"/>
,这意味着不能为ID分配小于或等于0的值(因为最小值是exclusive,所以它不包括0
)。
解决这个问题的一个简单的方法是下载WSDL,将<xsd:minExclusive value="0"/>
更改为<xsd:minExclusive value="-1"/>
,然后将web引用重新添加到指向修改后的WSDL而不是原始WSDL的项目中。
解决这个问题的正确方法是弄清楚为什么该ID被分配了一个值0
,也许该方法在找不到您请求的对象时会返回这个值?不要相信API会遵守自己的限制!
.NET是正确的。"0"不是ID的有效值。