电竞比分网-中国电竞赛事及体育赛事平台

分享

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

 希望蠟炬 2013-01-22

 分析過程:

用soap toolkit的跟蹤工具MSSoapT看一下,客戶端到底向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ù)中,多了個encodingStyle屬性,盡管沒有制定值。我們想辦法屏蔽這個屬性。
在SoapSerializer30的startElement方法中的參數(shù)中按照如下方式調(diào)用,可以不制定這個屬性。
改代碼如下:


...
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();
...


但返回結果還是0,看來和encodingStyle無關??纯锤櫱闆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ā)出的請求,差別在哪里?認真看一下,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();

測試結果正常了,返回15。

看看這時候發(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的問題,也許是他提供的例子自身就有問題,也許是我的運行環(huán)境有問題,當然,更也許是我還沒有真正理解xml的命名空間或沒有正確使用WebService。


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多