日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

用Soap Toolkit調(diào)用WebService的一個(gè)問題

 希望蠟炬 2013-01-22

 分析過程:

用soap toolkit的跟蹤工具M(jìn)SSoapT看一下,客戶端到底向WebService發(fā)送了什么數(shù)據(jù):

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="" xmlns:SOAP-ENV="http://schemas./soap/envelope/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="">
<SOAPSDK1:Add xmlns:SOAPSDK1="http:///" SOAP-ENV:encodingStyle="">
<n1 SOAP-ENV:encodingStyle="">5</n1>
<n2 SOAP-ENV:encodingStyle="">10</n2>
</SOAPSDK1:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

再看看vs.NET調(diào)試中,IE瀏覽器發(fā)出的數(shù)據(jù)(模板):


<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:xsd="http://www./2001/XMLSchema" xmlns:soap="http://schemas./soap/envelope/">
<soap:Body>
<Add xmlns="http:///">
<n1>int</n1>
<n2>int</n2>
</Add>
</soap:Body>
</soap:Envelope>

區(qū)別在哪里?soaptoolkit的數(shù)據(jù)中,多了個(gè)encodingStyle屬性,盡管沒有制定值。我們想辦法屏蔽這個(gè)屬性。
在SoapSerializer30的startElement方法中的參數(shù)中按照如下方式調(diào)用,可以不制定這個(gè)屬性。
改代碼如下:


...
Serializer->startElement("Add","http:///","NONE","");
Serializer->startElement("n1","","NONE","");
Serializer->writeString("5");
Serializer->endElement();
Serializer->startElement("n2","","NONE","");
Serializer->writeString("10");
Serializer->endElement();
Serializer->endElement();
...


但返回結(jié)果還是0,看來和encodingStyle無關(guān)??纯锤櫱闆r:


<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="" xmlns:SOAP-ENV="http://schemas./soap/envelope/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="">
<SOAPSDK1:Add xmlns:SOAPSDK1="http:///">
<n1>5</n1>
<n2>10</n2>
</SOAPSDK1:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

問題解決:
比較一下vs.net中發(fā)出的請求,差別在哪里?認(rèn)真看一下,n1和n2沒有指定命名空間,那么就指定一下吧。
把代碼改成:


Serializer->startElement("Add","http:///","NONE","");
Serializer->startElement("n1","http:///","NONE","");
Serializer->writeString("5");
Serializer->endElement();
Serializer->startElement("n2","http:///","NONE","");
Serializer->writeString("10");
Serializer->endElement();
Serializer->endElement();

測試結(jié)果正常了,返回15。

看看這時(shí)候發(fā)出的xml數(shù)據(jù):
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="" xmlns:SOAP-ENV="http://schemas./soap/envelope/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="">
<SOAPSDK1:Add xmlns:SOAPSDK1="http:///">
<SOAPSDK1:n1>5</SOAPSDK1:n1>
<SOAPSDK1:n2>10</SOAPSDK1:n2>
</SOAPSDK1:Add>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

原因:

也許是VS.NET的問題,也許是SoapToolKit的問題,也許是他提供的例子自身就有問題,也許是我的運(yùn)行環(huán)境有問題,當(dāng)然,更也許是我還沒有真正理解xml的命名空間或沒有正確使用WebService。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多