0

ksoap2 を介してパラメーターを渡すことをテストするための Web サービスを作成しました。かなり単純なプロセスのように思えましたが、単純なものが欠けているようです。Web サービスは、渡された整数を返すだけです。以下のコードを実行すると、1 ではなく数値 0 が返されます。

    private static String SOAP_ACTION = "http://tempuri.org/TestParams";
private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME = "TestParams";
private static String URL = "http://services.lockrem.com/WebService.asmx?WSDL";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("RoundId", 1);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
    } catch (Exception e) {
        e.printStackTrace();
    }

    SoapObject result = (SoapObject)envelope.bodyIn;

注: .net Web ページを使用してこれをテストしたところ、期待どおりに数値 1 が返されます。ここでは、Web サービスは問題ではありません。

こちらがウェブサービスです。

    [WebMethod]
public int TestParams(int RoundId)
{
    return RoundId;
}

助けてくれてありがとう。

4

2 に答える 2

0

最後にWSDLを削除してみてください

private static String URL = "http://services.lockrem.com/WebService.asmx";

さらに、これを使用して応答を取得してみてください。

Object response = envelope.getResponse();

それ以外のSoapObject result = (SoapObject)envelope.bodyIn;

編集済み

これは機能します:

public class MainActivity extends Activity {

private static String NAMESPACE = "http://tempuri.org/";
private static String METHOD_NAME = "TestParams";
private static String URL = "http://services.lockrem.com/WebService.asmx";
private TextView tv;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tv = (TextView)findViewById(R.id.tv);
    HttpTransportSE transport = new HttpTransportSE(URL);
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("RoundId", 1);
    SoapSerializationEnvelope envelope =
        new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    try {
        transport.call(NAMESPACE + METHOD_NAME, envelope);
        Object response = envelope.getResponse();
        tv.setText(response.toString());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

それが役に立てば幸い。

于 2012-04-08T22:22:01.213 に答える
0

免責事項: kSoap2 を使用して .NET Web サービスと通信しようとするときはいつでも、多くの操作を行うことになります。つまり、文字通り、Fiddler2を使用して Windows マシンをセットアップし、それを失敗した要求と動作中の参照要求の両方のプロキシとして使用するので、実際に何が問題なのかを確認できます。自明ではないことをしようとしたら、すぐに似たようなことをすることを強くお勧めします。

とはいえ、あなたの場合、それで十分かもしれません

envelope.dotNet = true;
于 2012-04-08T19:24:39.613 に答える