SoapHttpClientProtocol.Invoke делает запрос POST, и я хочу, чтобы он сделал GET, как мне это сделать? - PullRequest
0 голосов
/ 29 августа 2018

Это часть кода в классе, который я использую для вызова веб-службы (этот класс наследуется от SoapHttpClientProtocol). Всякий раз, когда я вызываю localidades (), я получаю ошибку 405 от сервера, это потому, что localidades () отправляет сообщение вместо get, а сервер настроен на разрешение только get. Как я могу изменить тип запроса?

Я пытался изменить тип запроса, переопределив метод GetWebRequest () (кроме добавления базовой аутентификации), но он только добавляет базовую аутентификацию и не изменяет тип запроса.

protected override System.Net.WebRequest GetWebRequest(Uri uri)
    {
        var request = base.GetWebRequest(uri);
        String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes("username" + ":" + "password"));
        request.Headers.Add("Authorization", "Basic " + encoded);
        request.Method = System.Net.WebRequestMethods.Http.Get;
        return request;
    }

    /// <remarks/>
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/localidades", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    public string localidades() {
        object[] results = this.Invoke("localidades", new object[0]);
        return ((string)(results[0]));
    }

1 Ответ

0 голосов
/ 29 августа 2018

SOAP - это всегда HTTP POST. Если сервер ожидает GET, он неправильно размещает службу SOAP.

...