Ошибка неверного запроса 400: использование веб-службы с использованием запроса mime - PullRequest
0 голосов
/ 22 октября 2018

Последние две недели я не могу найти решение довольно простого вопроса.Интересно то, что веб-сервис работает хорошо.Я могу вызывать методы обслуживания с помощью клиента WCF.Он также может быть доступен с помощью программного обеспечения SoapUI.

Вопрос касается использования "веб-службы через кодировку Mtom".Я хочу использовать веб-сервис через MIME-запрос.

Реализация WebService

У меня есть простой веб-сервис вместе с функцией AddData (int a, int b).

[ServiceContract]
public interface IService1
{
    [OperationContract]
    int AddData(int i, int j);

}


public class Service1 : IService1
    {

        public int AddData(int a, int b)
        {
            return a + b;
        }
}

Binding и MessageEncoding для веб-службы - BasicHttpBinding и Mtom соответственно:

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="myBasicHttpBinding" messageEncoding="Mtom" />
  </basicHttpBinding>      
</bindings>

Потребление клиента WebService На стороне клиента / для кодирования для потребленияВеб-служба работает так:

private void webService_AddDataMIME()
    {
        string endPoint = url;
        string boundary = "MIMEBoundaryurn";
        string CRLF = "\r\n";
        string uuid = System.Guid.NewGuid().ToString();
        string reqUUID = System.Guid.NewGuid().ToString();
        string attchmtUUID = System.Guid.NewGuid().ToString();
        HttpWebResponse httpResp = null;

        //Create the HTTP request and set the headers
        HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
        httpRequest.Headers.Add("Accept-Encoding: gzip,deflate");
        httpRequest.Headers.Add("UserAgent", "Apache-HttpClient");
        httpRequest.Headers.Add("MIME-Version", "1.0");
        httpRequest.Headers.Add("SOAPAction", @"http://tempuri.org/IService1/AddData");
        string ContentType = "multipart/related ; type=\"application/xop+xml\" ;start=\"abcID\"; start-info=\"text/xml\";  boundary=\"" + boundary + "\"";
        httpRequest.ContentType = ContentType;
        httpRequest.Method = "POST";

        string uploadFileRequest = boundary + CRLF
              + "Content-Type:application/xop+xml; charset=UTF-8; type=\"text/xml\" " + CRLF
              + "Content-Transfer-Encoding: 8bit" + CRLF
              + "Content-ID: abcID" + CRLF + CRLF
              + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\"><soapenv:Header/><soapenv:Body><tem:AddData><tem:i>2</tem:i><tem:j>3</tem:j></tem:AddData></soapenv:Body></soapenv:Envelope>"
              + CRLF + boundary + uuid + "--" + CRLF + CRLF;

        //Convert the string to a byte array
        byte[] postDataBytes1 = System.Text.Encoding.UTF8.GetBytes(uploadFileRequest);

        int len = postDataBytes1.Length;
        httpRequest.ContentLength = len;

        //Post the request
        System.IO.Stream requestStream = httpRequest.GetRequestStream();
        requestStream.Write(postDataBytes1, 0, postDataBytes1.Length);

        string response;
        // Get response and write to console
        try
        {
            httpResp = (HttpWebResponse)httpRequest.GetResponse();
        }
        catch (WebException e)
        {
            using (WebResponse respons = e.Response)
            {
                HttpWebResponse httpResponse = (HttpWebResponse)respons;
                Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
                using (Stream data = respons.GetResponseStream())
                using (var reader = new StreamReader(data))
                {
                    string text = reader.ReadToEnd();
                    Console.WriteLine(text);
                }
            }
        }

        StreamReader responseReader = new StreamReader(httpResp.GetResponseStream(), Encoding.UTF8);
        response = responseReader.ReadToEnd();
        httpResp.Close();

        Console.WriteLine(response);
    }

Ошибка: При запуске клиентского кода он возвращает «Ошибка 400: неверный запрос»

Снимок экрана: ошибка: enter image description here

...