上一篇(.NET 发送电信彩信 组包(一))已经提到.NET发送电信彩信组包。
并且提供了彩信包的格式。
这里我就来解释下各个部分。已经可能会遇到的问题。我是通过HttpWebRequest POST请求的方式发送这个包的。
- POST /MmsSendMessageService HTTP/1.1
- Content-Type: multipart/related; boundary="==part20111027095621=="; type="text/xml"; start="<SOAP-ENV:Envelope>"
- SOAPAction: ""
- Host: 118.85.200.55:9081
- Content-Length: 49878
- Expect: 100-continue
这个是HttpWebRequest 请求的头。这两个东西很重要。
Content-Type: multipart/related; boundary="==part20111027095621=="; type="text/xml"; start="<SOAP-ENV:Envelope>"
SOAPAction: "" 电信文档里有提到,SOAPAction用空值。
需要添加到头中去。
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(请求的地址);
myRequest.ContentType = "multipart/related; boundary=\"==part20111027095621==\"; type=\"text/xml\"; start=\"<SOAP-ENV:Envelope>\"";
myRequest.Headers.Add("SOAPAction: \"\"");
包的格式在 .NET 发送电信彩信 组包(一)里已经给出。
这里要说的是几个特别需要注意的地方。
根据包格式组包成功后,和电信对接测试。
一直不能成功。通过抓包发现错误提示是
<faultstring>500 Internal Server Error</faultstring>
具体错误是:
<messageId>SVC0001</messageId>
<text>SOAP_VERSIONMISMATCH</text>
SOAP版本不匹配。疯了。
我仔细核对,看看是不是包那里有格式不正确,木有啊
郁闷啊,老天啊。那里有问题啊。
只有一天了,今天在不搞定,测试就不能通过了。
业务就要打回来了。(人在屋檐下,不得不低头啊)
继续调整,在测试,还是相同错误。
继续和电信提供的包格式核对,确定包体和附件都没问题。
错误的内容是SOAP版本不正确,我就想难道是电信的和我用的SOAP版本不想符合,
于是我就继续查找SOAP相关的知识。
看到一个很有用的帖子,地址不记得了(找到在发布上来)。
帖子中说道带附件的SOAP包格式。
包体之间需要用换行符号隔开。及:
- --==part20111027095621==这里有个\r\n
- Content-Type: text/xml; charset=UTF-8 这里有个\r\n
- Content-Transfer-Encoding: binary 这里有个\r\n
- Content-ID: <SOAP-ENV:Envelope> 这里有个\r\n 还需要在来一个\r\n空一行
- <?xml version="1.0" encoding="UTF-8" ?>
包体和附件,附件中协议和附件体具体格式请参照.NET 发送电信彩信 组包(一)。
这个换行一定要注意,不然post就不能成功。