как добавить вложение в запрос SOAP - PullRequest
0 голосов
/ 27 сентября 2019

я отправил запрос к API мыла с приложением, как показано ниже

    WebResponse response = null;
            try
            {

string sWebAddress = "http://myserver-id/axis2/services/NGOAddDocServiceImp?wsdl";
                string filePath = @"C:/Users/ashokr/Desktop/download.png";
                string filename = "download.png";
                string soapxml = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:prov=\"http://provider.ws.jts.omni.newgen.com\" xmlns:xsd=\"http://adddoc.bdo.ws.jts.omni.newgen.com/xsd\"><soap:Header/><soap:Body><prov:addDocument_Ext><prov:param0><xsd:cabinetName>iw_consumer</xsd:cabinetName><xsd:documentPath></xsd:documentPath><xsd:folderIndex>4338977</xsd:folderIndex><xsd:jtsAddress>10.24.96.98</xsd:jtsAddress><xsd:name>" + filename + "</xsd:name><xsd:portId>3333</xsd:portId><xsd:userDBId>607323535</xsd:userDBId><xsd:userName>IBG_BFIL_Assets_User</xsd:userName><xsd:userPassword>Test@351</xsd:userPassword><xsd:volumeId>1</xsd:volumeId></prov:param0></prov:addDocument_Ext></soap:Body></soap:Envelope>";

                string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
                byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
                HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(sWebAddress);
                wr.Headers.Add("Accept-Encoding", "gzip,deflate");
                // wr.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip, deflate");
                //wr.Headers.Add(HttpRequestHeader.ContentEncoding, "gzip");
                // wr.Headers.Add("Content-Transfer-Encoding", "8bit");
                wr.SendChunked = false;
                //wr.Headers.Add("SOAPAction", "");
               // wr.ContentLength = 650366;
                wr.ContentType = "multipart/related; type =\"application/txt\"; start=\"<rootpart@soapui.org>\";  boundary=" + boundary;
                wr.Accept = "Accept: text/xml, multipart/related, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2";
                // wr.ContentType = "multipart/related;type=\"application/soap + xml\";start=\"<rootpart@soapui.org>\"; boundary=" + boundary;
                wr.Method = "POST";
                wr.Host = "10.24.96.98:8480";
               wr.UserAgent = "Apache-HttpClient/4.1.1 (java 1.5)";
               //wr.Headers.Add("MIME-Version", "1.0");

               // wr.Headers.Add("Content-ID","<1112534000021702.png>");
                //wr.Headers.Add("Content-Disposition", "attachment");
                //wr.Headers.Add("Content-ID:", "test.png");
               // wr.Headers.Add("Content-Transfer-Encoding", "8bit");
                //wr.Accept = "gzip,deflate";
                wr.KeepAlive = true;
                wr.Credentials = System.Net.CredentialCache.DefaultCredentials;
                Stream stream = wr.GetRequestStream();
                string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";

                stream.Write(boundarybytes, 0, boundarybytes.Length);
                byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(filePath);
                stream.Write(formitembytes, 0, formitembytes.Length);
                stream.Write(boundarybytes, 0, boundarybytes.Length);
                string headerTemplate = "Content-Disposition: form-data;Content-ID: \"rootpart@soapui.org\"; name =\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
                string header = string.Format(headerTemplate, "file", Path.GetFileName(filePath), Path.GetExtension(filePath));
                byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
                stream.Write(headerbytes, 0, headerbytes.Length);

                FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                byte[] buffer = new byte[4096];
                int bytesRead = 0;
                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                    stream.Write(buffer, 0, bytesRead);
                fileStream.Close();

                byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
                stream.Write(trailer, 0, trailer.Length);

                using (StreamWriter stmw = new StreamWriter(stream))
                {
                    stmw.Write(soapxml);
                   // stream.Close();
                }
                response = wr.GetResponse();
                dynamic encoding = ASCIIEncoding.ASCII;
                using (var reader = new System.IO.StreamReader(response.GetResponseStream(), encoding))
                {
                    string responseText = reader.ReadToEnd();


                }
                byte[] myData;
                using (var webResponse = wr.GetResponse())
                {
                    var responseStream1= webResponse.GetResponseStream();
                    //myData = ReadFully(responseStream);    // done with the stream now, dispose of it
                }

                // Do whatever you need with the response
                //string responseString = Encoding.ASCII.GetString(myData);



                Stream responseStream = response.GetResponseStream();
                StreamReader streamReader = new StreamReader(responseStream);
                string responseData = streamReader.ReadToEnd();
                return responseData;
            }
            catch (WebException webex)
            {
                WebResponse errResp = webex.Response;
                using (Stream respStream = errResp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(respStream);
                    string text = reader.ReadToEnd();
                    //  Response obj = new Response();

                    // obj.Status = "Fail";
                    // obj.ErrorMessage = reader.ToString();

                    //return obj;
                    return "";
                }

Я получаю сообщение об ошибке ниже

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:Action>http://www.w3.org/2005/08/addressing/soap/fault</wsa:Action></soapenv:Header><soapenv:Body><soapenv:Fault><soapenv:Code><soapenv:Value>soapenv:Receiver</soapenv:Value></soapenv:Code><soapenv:Reason><soapenv:Text xml:lang="en-US">Part content ID cannot be blank for non root MIME parts</soapenv:Text></soapenv:Reason><soapenv:Detail /></soapenv:Fault></soapenv:Body></soapenv:Envelope>

' Пожалуйста, предложите мне решить эту проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...