SoapHttpClientProtocol.Invoke正在发出POST请求,我希望它进行GET,该怎么办?

时间:2018-08-29 15:06:32

标签: c# asp.net web-services soap-client

这是我用来调用Web服务的类中的代码的一部分(该类继承自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 :(得分:1)

SOAP始终是HTTP POST。如果服务器需要GET,则表示服务器未正确托管SOAP服务。