Подпись метода веб-службы изменена на объекты запроса / ответа для строки типа данных [] - PullRequest
3 голосов
/ 10 августа 2009

У меня есть два сайта, оба используют .Net Framework 3.5. На одном веб-сайте размещается мыльный веб-сервис, а на другом - ссылка на этот сервис. У меня произошли некоторые неожиданные события с моими сигнатурами веб-методов. У меня есть простой метод в моем веб-сервисе с подписью, такой как:

[WebMethod]
public string[] HelloWorld()
{
    return new[] { "Hello World" };
}

Но когда я обращаюсь к этой веб-службе с помощью функции «Добавить ссылку на службу» в VS2008 с конфигурацией, установленной на «Всегда генерировать контракты сообщений» (хотя, когда я проверяю «типы повторного использования в ссылочных сборках», у меня появляется та же проблема), автоматически сгенерированные прокси-объекты изменяют подпись следующим образом:

HelloWorldResponse HelloWorld(HelloWorldRequest request)

Я пытался найти это в сети, но не смог найти что-то, что просто объяснило бы мне, почему это происходит, и могу ли я / должен попытаться обойти это?

У меня также есть этот вопрос: Как определить, следует ли им выбирать параметр конфигурации ссылки на службу для «повторного использования типов в ссылочных сборках» и «всегда генерируемых контрактов сообщений»?

1 Ответ

1 голос
/ 10 августа 2009

Параметр message-contracts может иметь такой эффект; цель здесь состоит в том, чтобы позволить детальный контроль над основным запросом. В конечном счете, то, что вы отправляете (негласно) , является полезной нагрузкой запроса.

Опция reuse-types более типично используется с объектами (не такими вещами, как string[]) - и означает, что если у вас есть 100% совпадающий Customer (скажем) класс локально, он может повторно использовать его для веб-сервис, а не генерация прокси-типа.

Кроме того, обратите внимание, что вы на самом деле не используете службу WCF ([WebMethod] - это более старый стиль веб-службы). Таким образом, у вас могут быть лучшие результаты с «веб-справочником»; при добавлении службы нажмите «Дополнительно», затем «Добавить веб-ссылку ...». При этом используется более старый пользовательский интерфейс и wsdl.exe для генерации кода , предназначенного для [WebMethod] (asmx), а не WCF (svc).

Конечно, вместо хостинга a [WebMethod] вы могли бы (так как сервер также 3.5) разместить службу WCF; это может сделать вещи проще.

Финальная точка WCF; если вы действительно хотите одного и того же контракта на клиенте и сервере, вы можете использовать сборку или общий доступ к классам для использования одних и тех же типов на обоих концах. Однако это не поддерживается для [WebMethod].

...