Как отправить запрос в 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 и перепробовать все возможные коды до третьей страницы, все еще не успех, что причина, по которой я размещаю свой вопрос здесь. я знал эту идею, только кодирующую часть.