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

96
7

Мне нужно получить некоторые данные от поставщика услуг и настроить наше приложение .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;

Спасибо

спросил(а) 2021-01-19T16:31:52+03:00 2 месяца, 3 недели назад
1
Решение
149

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

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

ответил(а) 2021-01-19T16:31:52+03:00 2 месяца, 3 недели назад
99

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


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

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

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

ответил(а) 2021-01-19T16:31:52+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема