Как передать пары имя / значение в веб-метод ASMX? - PullRequest
3 голосов
/ 25 января 2011

Я создаю веб-сервис, который, по сути, дистанционно управляет некоторыми вызовами базы данных (чтобы они происходили через HTTP, а не по умолчанию порт SQL Server 1433).

По сути, я пытался передать номерпараметров в WebMethod на веб-сервисе ASMX.Параметры:

  • Строка, представляющая идентификатор запроса, который будет выполнен.
  • DataTable, представляющий структуру таблицы, в которую должна быть заполнена информация.
  • Словарь параметров (т. Е. Пары имя-значение), который нужно запустить с запросом, представленным идентификатором выше дляполучить ожидаемые результаты.
  • Логическое значение, которое не имеет значения для этого вопроса

Теперь у меня проблема в том, что строка для идентификатора, DataTable и логического значения все проходят просто отлично, ноСловарь не имеет.Я знаю, что по умолчанию все, что реализует IDictionary, не поддерживается XMLSerializing, поэтому я преобразовал словарь в два массива объектов, один для ключей и один для значений.

Из чего я отправляюКлиент выглядит правильно.Пакет SOAP содержит правильные значения как для массива ключей, так и для массива значений.

То, что я получаю на стороне WebService (я могу разбить WebMethod, как он называется), равно нулю для обоих измассивы.Не пустой массив, просто ноль.

Я много чего пробовал, чтобы передать эти параметры в веб-сервис (закодировал SerializableDictionary, попытался вставить пары ключ / значение в таблицу данных, попыталсяпросто использовать два строковых массива и затем преобразовать результаты обратно в правильные типы на стороне WebService), но мне совершенно не повезло.

Итак, я предполагаю, что в итоге мой вопрос:

Кто-нибудь знает хороший способ для успешной отправки пар имя-значение, где имя является строкой, а значение может быть практически любым типом объекта, но всегда будет сериализуемым объектом в WebService WebMethod, так что их имена-значенияправильно интерпретируется на сервисной стороне.

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

Я не совсем уверен, в чем проблема (возможно, это была моя собственная глупость), но я снова начал с нуля и реализовал решение с двумя массивами (один из ключей (строк) и один из объектов (значений)) и все заработало как положено.

2 голосов
/ 25 января 2011

Вы упоминаете, что значением может быть "почти любой тип объекта", я подозреваю, что он не будет летать и может быть там, где он ломается, все элементы должны быть сериализуемыми.

Попробуйте использовать что-то вроде этого:

http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

...