Member 14676278 Ответов: 0

Как отправить запрос в soap XML с docx atachment для C#


Попытка отправить soap - запрос в веб-службы JAVA

Ниже приведен сервис create в JAVA Axis. мне нужно приложить документ в этом мыльном запросе

<soapenv:envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:doc="http://document.service.servicelayer.dms.cmcc.st" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
  <soapenv:header>
  <soapenv:body>
        <doc:create soapenv:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
              <documenttype xsi:type="soapenc:string">st_work_instr
              <matrixname xsi:type="soapenc:string">c_02400_08_Work Instructions
              <ticket xsi:type="soapenc:string">E9F491E565777832CE105AF781F035E2C080C0D8094E9FBE
              <attrname xsi:type="cre:ArrayOf_xsd_anyType" 

="" soapenc:arraytype="xsd:anyType[]" xmlns:cre="https://dmsws-qa.sgp.st.com:20000/dmsservice/layer/CreateService">
                    <item xsi:type="xsd:string">st_category
                    <item xsi:type="xsd:string">title
                    <item xsi:type="xsd:string">r_object_type
                    <item xsi:type="xsd:string">st_approver
                    <item xsi:type="xsd:string">st_responsible
                    <item xsi:type="xsd:string">st_wi_department
                    <item xsi:type="xsd:string">st_business_domain
              
              <attrvalue xsi:type="cre:ArrayOf_xsd_anyType" 

="" soapenc:arraytype="xsd:anyType[]" xmlns:cre="https://dmsws-qa.sgp.st.com:20000/dmsservice/layer/CreateService">
                    <item xsi:type="xsd:string">08-01-01
                    <item xsi:type="xsd:string">seongtest01
                    <item xsi:type="xsd:string">st_work_instr
                    <item xsi:type="xsd:string">dmsupport1
                    <item xsi:type="xsd:string">dmsupport1
                    <item xsi:type="xsd:string">30
                    <item xsi:type="xsd:string">09
              
              <relchildnames xsi:type="cre:ArrayOf_xsd_anyType" 

="" soapenc:arraytype="xsd:anyType[]" xmlns:cre="https://dmsws-qa.sgp.st.com:20000/dmsservice/layer/CreateService">
              <relchildversions xsi:type="cre:ArrayOf_xsd_anyType" 

="" soapenc:arraytype="xsd:anyType[]" xmlns:cre="https://dmsws-qa.sgp.st.com:20000/dmsservice/layer/CreateService">
              <filename xsi:type="soapenc:string">Doc1.docx
              <relnames xsi:type="cre:ArrayOf_xsd_anyType" 

="" soapenc:arraytype="xsd:anyType[]" xmlns:cre="https://dmsws-qa.sgp.st.com:20000/dmsservice/layer/CreateService">
              <rendfilename xsi:type="soapenc:string">
              <rendtype xsi:type="soapenc:string">docx
              <historyfilename xsi:type="soapenc:string">
              <promoteoption xsi:type="soapenc:string">false


Что я уже пробовал:

public void Upload(string uri, string filePath, string ticket, string docTitle, string userName)
        {
            var _action = "https://dmsws-qa.sgp.st.com:20000/dmsservice/layer/CreateService";
            string formdataTemplate = "Content-Disposition: form-data; filename=\"{0}\";Content-ID=\"Doc1.docx\";\r\nContent-Type: application/octet-stream\r\n\r\n";
            string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
            byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

            

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            request.Headers.Add("SOAPAction", _action);
            request.Headers.Add("Accept-Encoding", "gzip,deflate");
            request.ServicePoint.Expect100Continue = false;
            request.Method = "POST";
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            request.Headers.Add("MIME-Version", "1.0");

            using(FileStream fileStream    = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                XmlDocument soapEnvelopeDocument = new XmlDocument();

                String _pathFiles = System.Configuration.ConfigurationManager.AppSettings.Get("XMLRequest");
                XmlDocument xmlFile = new XmlDocument();
                xmlFile.Load(_pathFiles + "CreateService.xml");
                string finalXML = xmlFile.InnerXml.Replace("?ticket", ticket).Replace("?docTitle", docTitle).Replace("?docApprover", userName);
                LoggerUtility.LogInfo(finalXML);
                //xmlFile.Save(_pathFiles + "ConnectService.xml");

                soapEnvelopeDocument.LoadXml(finalXML);
                using (Stream requestStream = request.GetRequestStream())
                {
                    requestStream.Write(boundarybytes, 0, boundarybytes.Length);
                    string formitem = string.Format(formdataTemplate, Path.GetFileName(filePath));   
                    byte[] formbytes = Encoding.UTF8.GetBytes(formitem);
                    requestStream.Write(formbytes, 0, formbytes.Length);
                    byte[] buffer = new byte[1024 * 4];
                    int bytesLeft = 0;

                    while ((bytesLeft = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        requestStream.Write(buffer, 0, bytesLeft);
                    }
                    StreamReader stmreader = new StreamReader(requestStream);
                    string webexception = stmreader.ReadToEnd();
                    soapEnvelopeDocument.Save(requestStream);
                }

            }

            try
            {           
                using (HttpWebResponse response    = (HttpWebResponse)request.GetResponse()) { }

                Console.WriteLine ("Success");
            }
            catch (WebException webex)
            {
                WebResponse errResp = webex.Response;
                using (Stream respStream = errResp.GetResponseStream())
                {
                    StreamReader webexceptionreader = new StreamReader(respStream);
                    string webexception = webexceptionreader.ReadToEnd();

                    LoggerUtility.LogException("DMSCreateServiceRequestError", webexception);

                    throw;
                }
            }
        }

Richard MacCutchan

И что же? У вас есть вопрос?

Member 14676278

да, как писать на C# для кода

Richard MacCutchan

Извините, но это ничего не значит. Пожалуйста, отредактируйте свой вопрос и объясните, в чем именно заключается проблема и где она возникает.

Member 14676278

Мой вопрос на эту тему, верно? существует сообщение soap-конверта, которое мне нужно отправить в веб-службы JAVA. Я попытался написать много кода, чтобы отправить сообщение soap-конверта с вложенным файлом. но это не работает. поэтому я публикую пример файла конверта soap и код, который я пытался написать. но для вас это ничего не значит?

Richard MacCutchan

Видеть soap xml attachment - поиск в Google[^].

Member 14676278

у меня был поиск в google и перепробовать все возможные коды до третьей страницы, все еще не успех, что причина, по которой я размещаю свой вопрос здесь. я знал эту идею, только кодирующую часть.

0 Ответов