Как изменить версию http моего вызова веб-метода, чтобы остановить ошибку 505?

Мне нужно получить некоторые данные от поставщика услуг и настроить наше приложение.net, чтобы они указывали на их размещенный веб-сервис для получения данных. Используя приведенный ниже код, когда вызывается веб-метод (ws.DoTransfer) Я получаю следующую ошибку...

    private void DoTransferLocal()
    {
            Version version = new Version();
            string error = string.Empty;
            try
            {
                    RemoteService ws = new RemoteService();
                    ServicePoint spm = ServicePointManager.FindServicePoint(new Uri(ws.Url));
                    spm.Expect100Continue = true;
                    version = spm.ProtocolVersion;
                    ws.Credentials = credentials;
                    ws.PreAuthenticate = true;
                    RemoteResult result = ws.DoTransfer();
                    MessageBox.Show("Result = " + result.transferStatus);
            }
            catch (Exception ex)
            {
                    error = ex.Message;
            }
            finally
            {
                    MessageBox.Show(version.ToString() + Environment.NewLine + error);
            }
    }

Ошибка:

Запрос не выполнен с состоянием HTTP 505: версия HTTP не поддерживается.

Мне сказали, что версия HTTP должна быть 1.0, а моя - 1.1

Я прочитал несколько постов Google об этом и видел предложения отменить GetWebRequest метод, как показано здесь...

    protected override System.Net.WebRequest GetWebRequest(Uri uri)
    {   
            System.Net.HttpWebRequest request = base.GetWebRequest(uri) as System.Net.HttpWebRequest;
            request.ProtocolVersion = System.Net.HttpVersion.Version10;
            return request;
    }

... но когда я попробую это, GetWebRequest после base. подчеркнуто красным и имеет ошибку...

"Объект" не содержит определения для "GetWebRequest"

Может кто-нибудь сказать мне, как я изменяю версию HTTP на 1.0, но все еще использую подобный код (а не собираю мои собственные пакеты мыла) для вызова моего веб-метода?

Я не могу найти какой-либо код, который я могу просто вставить в мой код, который выглядит следующим образом:

    ws.HttpVersion = HttpVersion.Version10;

Спасибо

2 ответа

Измените Expect100Continue на false. Вы можете сделать это в файле конфигурации вашего приложения, добавив следующее:

<configuration>
    <system.net>
        <settings>
            <servicePointManager expect100Continue="false" />
        </settings>
    </system.net>
</configuration>

Если вы не можете переопределить GetWebRequest, вы используете сервис WCF, а не веб-сервис Soap. WCF не поддерживает HTTP/1.0

Создать ссылку на веб-службу, которая позволит вам использовать протокол HTTP/1.0.

  • Щелкните правой кнопкой мыши по проекту и выберите "Добавить сервис".
  • Нажмите на кнопку Дополнительно
  • Нажмите на Добавить веб-ссылку

Если вы используете то же пространство имен, что и раньше, никаких изменений кода не требуется

Другие вопросы по тегам