I'm having an issue with trying to use VB.NET and the WebRequest object to post some cXML text and an attachment. I believe I am formatting the text of the data I wish to post correctly, as it matches samples Ariba has supplied.
What I am uncertain of is if I am correctly using the WebRequest object to do the posting. I am setting the Method as "POST" and the ContentType as "multipart/mixed". I can successfully post cXML (using a ContentType of "text/xml"), so I know posting in general works.
The message I get back from Ariba is:
The document could not be parsed: Missing start boundary [ANCLS-741552]
However, as the following code shows, there is a start boundary. I have removed some proprietary data and replaced it with "...". Following the MIME text, I have included the relevant VB.NET code I am using.
Any and all suggestions are most welcome and appreciated!
------=_boundary.20100210154837663.173702
Content-Type: text/xml; charset=UTF-8
Content-ID: Part1.5213.20100210154837663.319349
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.018/cXML.dtd">
<cXML.../cXML>
------=_boundary.20100210154837663.173702
Content-Type: application/octet-stream
Content-transfer-encoding: base64
Content-ID: 5213.20100210154837663.319349
Content-Disposition: attachment; filename=attachment_20100210154837663_125705.jpg
Content-Length: 5660
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAd
.
.
.
dC2Nz9dOaQ1ZVIilwIpaWvLEg7aWuauv/9k=
------=_boundary.20100210154837663.173702--
Dim myWriter As StreamWriter = Nothing
Dim strUri As String = "https://service.ariba.com/service/transaction/cxml.asp"
Dim WebReq As WebRequest = System.Net.WebRequest.Create(strUri)
WebReq.Method = "POST"
WebReq.ContentType = "multipart/mixed"
myWriter = New StreamWriter(WebReq.GetRequestStream())
myWriter.Write(xmlText)
myWriter.Close()
Dim WebRsp As HttpWebResponse
WebRsp = CType(WebReq.GetResponse(), HttpWebResponse)
Bill - I got some info from Ariba and thought it might be useful to you:
Maybe you could try with a shorted boundary string. Also, note the 'start' parameter. Here's the one that worked for me:
request.ContentType = "multipart/related;boundary=outerboundary1;type=""text/xml"";start=""<x.xml>"""
A sample XML with the above boundary & start settings looks like this:
--outerboundary1
Content-Type: text/xml
Content-ID: <x.xml>
<?xml version="1.0"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.007/InvoiceDetail.dtd">
<cXML payloadID="za1saasxsx" timestamp="2003-04-04" xml:lang="en"><Header><From>
...
<Comments>These also use bluetooth<Attachment><URL>cid:[email protected]</URL></Attachment></Comments>
...
</Request></cXML>
--outerboundary1
Content-type: text/plain; charset=US-ASCII
Content-Disposition: attachment; filename=PremiereCatalog.xxx
Content-Length: 4
Content-ID: <[email protected]>
xxxx
--outerboundary1--
I know it can be very frustrating with very little help out there. So lemme know if you need the complete code that worked for me.
Pravin