Webサービスは、KSOAPメソッドを使用してアプリケーションからNULLパラメーターを受け取ります
-
27-09-2019 - |
質問
私はこれについて議論するトピックを見てきましたが、誰も解決策を投稿していないようです。現時点では、.NET Webサービスへのパラメーターの合格パラメーターをテストしています。パラメーターがWebサービスに到達すると、追加の文字列で追加すると、アプリケーションも返します。しかし、私が返しているのは、私が渡したパラメーターではなく、文字列メッセージだけです。私のウェブサービスや石鹸の方法に何か問題がありますか?
石鹸:
soapobject request = new soapobject(namespace、method_name);
request.addProperty("A", "workowr");
SoapSerializationEnvelope envelope =
new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
//SoapObject result = (SoapObject)envelope.getResponse();
String resultData = result.toString();
testTV.setText(resultData);
}
catch(Exception e)
{
testTV.setText(e.getMessage());
}
これが私のシンプルな.NET Webサービスです:
パブリック関数getReginfo(byval a as string)as string
+「文字列メッセージ」を返す
終了関数
どんな助けにも感謝します。
解決
私のために働いたのは、.NET Webサービスの両方とアプリケーションの両方で名前空間URLを変更することでした。
たとえば、私は持っていました:
"http://www.example.com/webservices/"
私は次のように変更しました:
「example.com/webservices/」
そして、それは完全に機能しました。
試してみます。
他のヒント
はい - KSOAPを介して接続するときに、Webサービス名空間にコロン(:)を持つことに問題があるようです。通常のノンパラメーターは正常に動作しますが、パラメーターは何らかの理由でnullとして通過しているようです。
実際、最後に余分な「/」を持つ必要はありません。
ネットに書かれたものをデバッグして試した後、パラメーターを渡すときに最も重要なことは、WebService-DeclarationとKSOAP2で同じステートメントを持つことであることがわかりました。
したがって、両方の場所で「/」を使用するか、両方の場所から削除します。 「http://」も使用するokeyです。
パラメーターを追加する完全なコードこれはこれを試してみてください
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
PropertyInfo pi = new PropertyInfo();
pi.setName("ProcName");
pi.setValue(a);
pi.setType(int.class);
request.addProperty(pi);
pi=new PropertyInfo();
pi.setName("UserName");
pi.setValue(b);
pi.setType(String.class);
request.addProperty(pi);
pi=new PropertyInfo();
pi.setName("Password");
pi.setValue(c);
pi.setType(String.class);
request.addProperty(pi);
pi=new PropertyInfo();
pi.setName("Paras");
pi.setValue(d);
pi.setType(String.class);
request.addProperty(pi);
Object response = null;
HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
response = envelope.getResponse();
} catch (final Exception e) {
String error = "no";
}
return response.toString();
}
WSDL XMLファイルに表示されるのとまったく同じ名前の名前スペースとSOAPアクションをコピーする必要があります。
私は同じ問題を抱えていました、そして、(名前スペースとSOAPアクション)からhttp://を削除したとき、問題は解決しました。ローカルサーバーで)
ただし、外部.NET Webサービス(Central Bank Web Service)にアクセスする別のアプリケーション(レート交換を取得)には、WSDLネームスペースとSOAPACTIONにhttp://が含まれています。