gpt4 book ai didi

.net - 向 SOAP 请求添加附件

转载 作者:行者123 更新时间:2023-12-02 08:36:34 25 4
gpt4 key购买 nike

我不知道如何在 SOAP 请求中添加附件。我们必须使用用 java 构建的第三方 Web 服务,这是我遇到过的最复杂的事情。我们使用过的任何其他需要附件的网络服务都有添加附件的方法或属性。简单的。然而,这个没有提供这样的方法。

我们已经得到了 SOAP 消息的一个版本,它与我们想要的 XML 完全一样,但是我们无法添加文件的 MIME 部分。

示例:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<soap:Header>
<payloadManifest xmlns="http://<examplePayload>">
<manifest contentID="Content0" namespaceURI="http://<exampleManifest>" element="ProcessRepairOrder" version="2.01" />
</payloadManifest>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2011-12-19T15:25:13Z</wsu:Created>
<wsu:Expires>2011-12-19T15:30:00Z</wsu:Expires>
</wsu:Timestamp>
<wsse:UsernameToken><wsse:Username>username</wsse:Username><wsse:Password>password</wsse:Password></wsse:UsernameToken></wsse:Security></soap:Header><soap:Body><ProcessMessage xmlns="<examplePayload"><payload><content id="Content0">

<s:ProcessRepairOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://example.xsd" xmlns:s="http://<exampleManifest>" xmlns:gwm="http://example">
<s:ApplicationArea>
<s:Sender>
<s:Component>Test</s:Component>
<s:Task>ProcessAttachment</s:Task>
<s:CreatorNameCode>Test</s:CreatorNameCode>
<s:SenderNameCode>XX</s:SenderNameCode>
<s:DealerNumber>111111</s:DealerNumber>
<s:DealerCountry>GB</s:DealerCountry>
</s:Sender>
<s:CreationDateTime>2010-03-26T13:37:05Z</s:CreationDateTime>
<s:Destination>
<s:DestinationNameCode>GM</s:DestinationNameCode>
<s:DestinationURI/>
<s:DestinationSoftwareCode>GWM</s:DestinationSoftwareCode>
</s:Destination>
</s:ApplicationArea>
<s:DataArea xsi:type="gwm:DataAreaExtended">
<s:Process/>
<s:RepairOrder>
<s:Header xsi:type="gwm:RepairOrderHeaderExtended">
<s:DocumentId/>
</s:Header>
<s:Job xsi:type="gwm:JobExtended">
<s:JobNumber/>
<s:OperationId>Test</s:OperationId>
<s:OperationName/>
<s:CodesAndComments/>
<s:Diagnostics/>
<s:WarrantyClaim xsi:type="gwm:WarrantyClaimExtended">
<s:OEMClaimNumber>00112233445566778899</s:OEMClaimNumber>
<gwm:Attachment>
<gwm:File><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:test.gif"/></gwm:File>
<gwm:Filename>test.gif</gwm:Filename>
</gwm:Attachment>
</s:WarrantyClaim>
<s:LaborActualHours>0.0</s:LaborActualHours>
<s:Technician/>
</s:Job>
</s:RepairOrder>
</s:DataArea>
</s:ProcessRepairOrder>
</content></payload></ProcessMessage></soap:Body></soap:Envelope>

这是我们可以生成并发送的 XML 部分,但是它是不正确的,因为我们需要其中的 MIME 部分,例如:

在 XML 之前:

--MIMEBoundary
Content-Type: application/xop+xml; charset=utf-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <rootpart>

XML 之后

--MIMEBoundary
Content-Type: image/gif; name=test.gif
Content-Transfer-Encoding: binary
Content-ID: <test.gif>
GIF89a@�

--MIMEBoundary--

我在互联网上寻找答案,但一无所获。似乎没有太多关于使用 WSE 的文档。我必须强调,WSE 是服务器端的要求,我无法改变技术来解决这个问题。

有没有办法添加这些 MIME 部分?

编辑:我必须补充一点,我可以获取通过 SoapUI 发送的带有附件的工作 XML 文档,但似乎无法在我们的代码中找到方法。

我添加了赏金来尝试解决此问题。如果有人有任何其他想法请告诉我。

再次编辑:我知道自从我能够在这里查看回复以来已经过去一周了,但是虽然有些人给出了在哪里查看的好主意,但我仍然一片空白。围绕 XopDocument 及其方法的糟糕文档是一个很大的症结所在,如果有人有任何使用 SaveToXopPackage 的示例,请提供,因为这已经开始令人烦恼了!

最佳答案

我遇到了同样的问题,我找到的最终解决方案是通过 HttpWebRequest。示例代码:

    public string ProcessAttachment(string fileInput)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(Settings.Default.GWM_WS_WebReference_GWM);
req.Headers.Add("SOAPAction", "\"http://www.starstandards.org/webservices/2005/10/transport/operations/ProcessMessage/v1_01/ProcessAttachment\"");
req.Headers.Add("Accept-Encoding", "gzip,deflate");
req.ContentType = "multipart/related; type=\"application/xop+xml\"; start=\"<rootpart@soapui.org>\"; start-info=\"text/xml\"; boundary=\"----=_Part_14_1350106.1324254402199\"";
req.Method = "POST";
req.UserAgent = "Jakarta Commons-HttpClient/3.1";
req.Headers.Add("MIME-Version", "1.0");
System.Net.ServicePointManager.Expect100Continue = false;
Stream memStream = new System.IO.MemoryStream();
FileStream fileStream = new FileStream(fileInput, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
fileStream.Close();
Stream stm = req.GetRequestStream();
memStream.Position = 0;
byte[] tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
stm.Write(tempBuffer, 0, tempBuffer.Length);
stm.Close();
HttpWebResponse resp = null;
resp = (HttpWebResponse)req.GetResponse();
stm = resp.GetResponseStream();
StreamReader r = new StreamReader(stm);
return r.ReadToEnd();
}

参数 fileInput 是包含 SOAP 请求的文件的绝对路径,该请求还包含要附加在末尾并以 MIME 边界分隔的文件的原始二进制数据

关于.net - 向 SOAP 请求添加附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8574938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com