Могу ли я остановить сервисную ссылку, генерирующую ArrayOfString вместо string []? - PullRequest
8 голосов
/ 08 февраля 2011

У меня есть веб-метод с такой подписью:

public string[] ToUpper(string[] values)

Я использую «Добавить ссылку на службу» в Visual Studio 2010 для создания ссылки на мою службу. К сожалению, этот процесс создает прокси-класс с именем ArrayOfString и использует этот тип вместо ожидаемого типа 'string []'. Сгенерированная подпись вызова асинхронного сервиса в итоге выглядит так:

public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values) { }
public void ToUpperAsync(Demo.ServiceReference.ArrayOfString values, object userState) { }

Я перепробовал все варианты раскрывающегося списка «Коллекция» в справочной форме службы конфигурации, и это, похоже, не имеет значения.

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

Как получить сгенерированный ссылочный класс службы для использования типа string [] вместо сгенерированного типа ArrayOfString? Любая помощь по этому вопросу будет принята с благодарностью.

EDIT: Как подсказывает @Oleg, я использую веб-сервисы ASMX.

Ответы [ 3 ]

13 голосов
/ 06 марта 2014

это изменение в XmlSerializer может быть сделано внутри файла Reference.svcmap. Откройте его в папке Service Reference и измените узел Serializer xml с «Auto» на «XmlSerializer», это решит проблему! Приветствия

5 голосов
/ 13 февраля 2011

Я мог бы воспроизвести вашу проблему при добавлении «Справочника услуг» в веб-сервис в стиле ASMX.Однако при добавлении «Ссылка на службу» в службу WCF или «Веб-ссылка» в качестве аргумента службы ASMX был задан тип string [].

В соответствии с этим я думаю, что вы можете решить проблему, заменив «Ссылка на службу"by" Веб-ссылка ".

Нажмите кнопку" Дополнительно ... "в" Диалоговом окне добавления справочной службы ".Add service reference

Нажмите «Добавить веб-ссылку ...» Advanced

Введите URL-адрес службы и добавьте веб-ссылку Add web reference

2 голосов
/ 20 апреля 2011

Слишком поздно, но может помочь людям в будущем ...

Используйте svcutil и явно сообщите утилите командной строки, что вы хотите, чтобы прокси-класс был сериализован XmlSerializer ине DataContractSerializer (по умолчанию).Вот пример:

svcutil /out:c:\Path\Proxy.cs /config:c:\Path\Proxy.config / async / serializer: XmlSerializer / namespace: *, YourNamespace http://www.domain.com/service/serviceURL.asmx

Обратите внимание, что веб-сервис является веб-сервисом ASP.NET ок?!

...