2

.net Web サービスを呼び出す次のコードがあります。コードはサービスに正常に接続しますが、パラメーター (deviceid) が渡されないようです。このメソッドは、常に null である渡された deviceid を返すだけです。

これは、deviceid パラメータが渡されていないことを示しています。誰かが送信 xml を表示するためにパケット スニファーを推奨しているのを見たと思いましたが、それが何であったか思い出せないようです。日食とウィンドウと組み合わせて使用​​できるものを誰かが提案できますか。

活動コード

    String deviceid = tManager.getDeviceId();

    SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);

    PropertyInfo pi = new PropertyInfo();

    pi.setName("deviceid");
    pi.type = PropertyInfo.STRING_CLASS;
    pi.setValue(deviceid.toString());
    request.addProperty(pi);

    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    soapEnvelope.dotNet = true;
    soapEnvelope.setOutputSoapObject(request);

    HttpTransportSE ht = new HttpTransportSE(URL);


    try{
        ht.call(SOAP_ACTION, soapEnvelope);
        SoapPrimitive result = (SoapPrimitive ) soapEnvelope.getResponse(); 


        Toast.makeText(ctx, "result = " + result.toString(), Toast.LENGTH_SHORT).show();

    }catch(Exception e){
        e.printStackTrace();
        Toast.makeText(ctx, "error: " + e.getMessage(), Toast.LENGTH_SHORT).show();

    }

Web サービス コード

        <WebMethod()> _
    Public Function CheckTrial(ByVal deviceid As String) As String

        Return deviceid
    End Function

私はすべてを試しましたが、これを解決する方法がわかりません。他に試してみるべき提案はありますか?

ワイヤーシャークからスパイとして送信された xml:

POST /android_service_test.asmx HTTP/1.1 
Host: ikonicsoft.com 
user-agent: kSOAP/2.0 
soapaction: http://ikonicsoft.com/CheckTrial 
content-type: text/xml 
connection: close 
content-length: 421  
<?xml version="1.0" encoding="UTF-8"?>
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:d="http://www.w3.org/2001/XMLSchema" 
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
    <CheckTrial xmlns="http://ikonicsoft.com" id="o0" c:root="1">
        <deviceid i:type="d:string">000000000000000</deviceid>
    </CheckTrial>
</v:Body>
</v:Envelope>

HTTP/1.1 200 OK 
Connection: close 
Date: Mon, 21 Jun 2010 16:35:10 GMT 
Server: Microsoft-IIS/6.0 
X-Powered-By: PleskWin 
X-Powered-By: ASP.NET 
X-AspNet-Version: 2.0.50727 
Set-Cookie: .ASPXANONYMOUS=fnyqjfFHywEkAAAAZGVjYjZmNTEtNWNiYi00YTIwLWEzYzktNzUxZDNjMDA0OGY00; 
expires=Mon, 30-Aug-2010 03:15:09 GMT; path=/; HttpOnly 
Cache-Control: private, max-age=0 
Content-Type: text/xml; charset=utf-8 
Content-Length: 299  

<?xml version="1.0" encoding="utf-8"?>
<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">
<soap:Body>
    <CheckTrialResponse xmlns="http://ikonicsoft.com/" />
</soap:Body>
</soap:Envelope>

ありがとう

パトリック

4

3 に答える 3

1

私が間違っていなければht.call(...)、SoapSerializationEnvelope を返します。返信は、渡された封筒からではなく、その封筒から引き出す必要があると思います

SoapSerializationEnvelope responseEnvelope = ht.call(SOAP_ACTION, soapEnvelope);
SoapPrimitive result = (SoapPrimitive ) responseEnvelope.getResponse(); 

それでもうまくいかない場合: Android 用の ksoap2 を使用していますか (Java バージョンと Android バージョンがあります)。Web サービスにログインする必要がありますか? 同様のタスクを実行しようとしているときに、ksoap がセッション Cookie、特にセッション ID を保存していないことがわかりました。ログインをextend維持するために、ServiceConnection と HttpTransportSE を使用して Cookie を文字列として保存する必要がありました。

パケット スニファーに関する限り、wire sharkを確認してください。

于 2010-06-21T14:10:52.583 に答える
0

Webサービスの名前空間からコロン(:)を削除してみてください...つまり、-ikonicsoft.comの代わりにコロン(:)を作成http://ikonicsoft.comし、新しい名前空間を使用するようにsoap参照呼び出しも更新してください。クレイジーですが、これで私の問題は解決しました(Blackberryについては、同じ原則が当てはまると思います)。

編集-所有していないWebサービスを利用しようとしている場合、これは理想的ではありませんが、少なくとも独自のWebサービスを利用するためのソリューションです。そこにあるコロンが混乱している理由については絶対に困惑していますが、Webサーバーに直接HTML投稿を行うと(Webサーバーのポート80にtelnetで接続することにより)、同じエラーが発生することに気付きました。

于 2010-07-07T19:40:27.250 に答える
0

PropertyInfoオブジェクトの名前空間を設定してみてください。

    pi.setNamespace(NAMESPACE);
于 2010-06-21T18:29:55.683 に答える