Как изменить версию 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.
- Щелкните правой кнопкой мыши по проекту и выберите "Добавить сервис".
- Нажмите на кнопку Дополнительно
- Нажмите на Добавить веб-ссылку
Если вы используете то же пространство имен, что и раньше, никаких изменений кода не требуется