Потребление SOAP в .NET - «Не удалось разобрать тип» - PullRequest
1 голос
/ 02 марта 2012

Я пытаюсь использовать службу Voxbone, находящуюся здесь: http://sandbox.voxbone.com/VoxAPI/services/VoxAPI?wsdl

Итак, я сделал, добавив новый проект, щелкнув правой кнопкой мыши - Add Service Reference.
Оттуда кучакод был сгенерирован, и мне дали объекты, которые мне нужны.Однако при вызове некоторых функций (некоторые из них работают) я получаю сообщение об ошибке:

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.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Поиск minExclusive в WSDL.Это под комментарием, который говорит <!-- RESTRICTIONS -->.Вы увидите <xsd:minExclusive value="0"/>, что означает, что ID не может быть присвоено значение 0 или меньше (поскольку минимальное значение исключительно , поэтому оно не включает 0).

Один простой хакерский способ исправить это - загрузить WSDL и изменить <xsd:minExclusive value="0"/> на <xsd:minExclusive value="-1"/>, а затем повторно добавить веб-ссылку на ваш проект, указывая на измененныйWSDL вместо оригинала.

Правильный способ исправить это - выяснить, почему этому идентификатору присваивается значение 0, возможно, метод возвращает это, когда не может найти запрошенный вами объект?Не верьте API в соблюдении его собственных ограничений!

0 голосов
/ 02 марта 2012

.NET правильно.«0» не является допустимым значением для идентификатора.

...