どうやらこれはかなり頻繁に経験される問題です。問題がどこにあるのか、何を調整する必要があるのか完全にはわかりませんが、私の人生では、パラメーターを使用して.NETXMLWebサービスからSoapObjectまたはSoapPrimitiveにNULLの結果以外を取得することはできません。
私はネット上で見つけたすべてを試しました:
- .setXmlVersionTagの追加=変更なし
- SoapPrimitiveの代わりにSoapObjectを使用する=変更なし
- SoapObjectの代わりにSoapPrimitiveを使用する=変更なし
- AndroidHttppTransportの代わりにHttpTransportSEを使用する=変更なし
- HttpTransportSEの代わりにAndroidHttpTransportを使用する=変更なし
- .dotNet =true=変更なしの設定
- .dotNet割り当て行の削除=変更なし
- Webサービスからコロン(HTTP://プレフィックス全体)を削除する=変更なし
- 直接割り当ての代わりにPropertyInfoクラスを使用する=変更なし
- PropertyInfoクラスの代わりに直接割り当てを使用する=変更なし
私は完全に途方に暮れていて、それはかなりイライラしています。私はWebサービスを完全に制御しているので(私はそれを書きました)、小さな変更があれば、私は喜んで試みます。
現在、私のコードは次のとおりです。
public void GetResults()
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("lastName", "sm");
request.addProperty("middleName", "");
request.addProperty("firstName", "");
request.addProperty("pageSize", 25);
request.addProperty("pageNumber", 1);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
//AndroidHttpTransport aht = new AndroidHttpTransport(URL);
HttpTransportSE aht = new HttpTransportSE(URL);
try
{
aht.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
aht.call(SOAP_ACTION, soapEnvelope);
//SoapObject result = (SoapObject)soapEnvelope.bodyIn;
SoapObject result = (SoapObject)soapEnvelope.getResponse();
//SoapPrimitive result = (SoapPrimitive) soapEnvelope.getResponse();
//Object result = soapEnvelope.getResponse();
Log.d("WS", String.valueOf(result));
}
catch(Exception e)
{
e.printStackTrace();
}
}
そして私のグローバルは次のようになります:
private static final String SOAP_ACTION = "http://yoda/SearchPerson";
private static final String METHOD_NAME = "SearchPerson";
private static final String NAMESPACE = "http://yoda/";
private static final String URL = "http://yoda/ws.asmx";
パラメータ化されていないWebサービスが血まみれのチャンピオンのように機能しているため、「yoda」が正しく翻訳されていることはわかっています。(明らかに(一部またはすべて)目前の問題である'request.addProperty'呼び出しを除いて、すべてが同一です。)
重要な場合は、KSoap2 2.5.2を使用して1.6ターゲットプラットフォームに対してこれを記述しており、すべての異なるAndroidエミュレーターで同じように動作します。
私はwiresharkでパケットをスニッフィングしましたが、エミュレーターは正しいものを送信しているように見えますが、受信する結果は常にNULLです。(これらの正確なパラメーターを、これらのWebサービスを使用するテストWebサイトに対して何度もテストしましたが、すべてが完全に機能しています。)
だから、誰かが私に骨をここに投げることができますか?
ありがとう、
マグア
2010.11.28を編集:
Wiresharkがパラメータを送信していると言っていても、Webサービスがパラメータを正しく受信していないように見えます。最初のパラメーターが何であれ、Webサービス自体からハードコードされた最後に「TEST」が付いた単純な文字列を返すことを想定したまったく新しいサービスを作成しました。
ええと、これを(Androidから)実行するたびに結果が得られ、それは常に「テスト」です。SoapEnvelopeをどのように定式化するか、またはパラメーターとして何を渡すかに関係なく、常に「TEST」を受け取ります。もちろん、サーバー上でWebサービスを呼び出すと、それはチャンピオンのように機能します(そして、私の結果は「これはテストです」です)。
私のWebサービスはIIS7を搭載したWindowsServer2008上にあります。アプリケーションプールは、「統合」マネージドパイプラインモードのフレームワークv2.0(v4.0ではない)に対して実行されています。
切断がどこにあるのかわかりません。KSoap2がパラメータを不適切に送信していませんか?IISが正しく構成されていませんか?完全に他に何か?