2016-10-25 12 views
0

Привет, у меня возникают проблемы с веб-службой Microsoft Dynamics NAV 2009 R2!MS DynamicsNAV Индекс веб-сервиса за пределами

Существует WebMethod дано называется OrderGoodsInsert, который нуждается в параметры lLanguageId [Int], LREC [Текст 250] [100]

LREC должен быть массив строк со значениями, такие как эти

  1. "Тип документа"
  2. "Номер документа"
  3. "Номер строки" - (пусто при создании)
  4. "Вставить пользователя"
  5. "Изменить пользователя"
  6. "Тип" [0 - «», 1 - G/L счета, 2 - Предмет, 3 - Ресурс, 4 - Fixed Asset, 5 - Charge (Item)]
  7. "Нет" - код товара
  8. Количество

Использование C# код, который я пытаюсь вызвать метод, который добавляется в качестве ссылки веб-службы для моего проекта. Код:

string[] arr = new string[8]; 
arr[0] = "1"; 
arr[1] = currentDocNo; 
arr[3] = "SU04"; 
arr[5] = "2"; 
arr[6] = item.Code; 
arr[7] = item.Amount; 
arr[2] = ""; 
arr[4] = ""; 

navWS.OrderGoodsInsert(1062, arr); 

Но когда я могу получить

A first chance exception of type 'System.Net.WebException' 
occurred in System.dll 
A first chance exception of type 'System.Web.Services.Protocols.SoapException' 
occurred in System.Web.Services.dll 

ошибка в том, что index out of bounds

Я делаю что-то не так?

+0

Как выглядит запрос SOAP для 'OrderGoodsInsert'? Это исключение на стороне сервера или клиентская сторона? Добавьте часть WSDL для вашей функции в вопрос, пожалуйста. – Smartis

+0

Кроме того, какое значение содержит элемент item.Code? – Smartis

+0

строка, например, «0067444» – HellOfACode

ответ

0

Проблема заключалась в том, что разработчик WS внес изменения и не отправил новую документацию. В массиве, который представлял собой полку, была нужна еще одна строка.

0

Ваш метод OrderGoodsInsert выглядит на SOAP Definition как этот

<sequence> 
    <element minOccurs="1" maxOccurs="1" name="lLanguageId" type="int"/> 
    <element minOccurs="1" maxOccurs="unbounded" name="lRec" type="string"/> 
</sequence> 

Так он ожидает string для переменной lRec и не string[].

Попробуйте преобразовать массив в одну строку с разделителем.

navWS.OrderGoodsInsert(1062, string.Join(";", arr)); 

Но я не уверен, какой из них является правильным разделителем для NAV WebServices.

+0

Ну, когда я делаю это, как я сделал с массивом, я получаю файл 'reference.cs', который содержит функцию, которую я пытаюсь вызвать https://dpaste.de/Me2m он создается при добавлении webReference к проекту. 'object [] results = this.Invoke (« OrderGoodsInsert », новый объект [] {lLanguageId, lRec});' это строка, которая генерирует исключение. – HellOfACode

+0

@HellOfACode 'index out of bounds' обычно означает, что ваш массив больше, чем ожидалось. Является ли это исключение уже ответом веб-сервера? Может ли быть так, что один из столбцов «IRec» автоматически создается и не подвергается воздействию WebService? Может быть, «Номер строки»? – Smartis

+0

Im пытается связаться с разработчиком документации для нашей компании. Скоро будет обновляться. – HellOfACode