1

AndroidアプリケーションからKSoapを使用してASMXサービスを呼び出そうとしています。両方とも文字列型の2つのパラメータを受け入れます。.NETアプリケーションから呼び出された場合は成功しますが、AndroidアプリケーションのWebサービスからの呼び出しが空白のパラメーターを取得した場合、理由がわかりません。

これが同じコードです

            static String NAMESPACE = "http://softco.org";
            static String URL_WS = "http://www.dummy.com/newservice.asmx";

            String GET_USER_DETAILS = "User_Verification";
            SoapObject request = new SoapObject(NAMESPACE, GET_USER_DETAILS);
            HttpTransportSE androidHttpTransport;

            // add parameters and values
            request.addProperty("MobileNo", String.valueOf("01234567899"));
            request.addProperty("Password", String.valueOf("abcdef"));

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);


            envelope.dotNet = true;
            envelope.encodingStyle = SoapSerializationEnvelope.XSD;
            envelope.setOutputSoapObject(request);

            // Web method call

            SoapObject result;

            try {
                androidHttpTransport = new HttpTransportSE(URL_WS);
                androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
                androidHttpTransport.call(NAMESPACE + "/" + GET_USER_DETAILS, envelope);
                result = (SoapObject) envelope.getResponse();

                // get the response

                int propCnt = result.getPropertyCount();


                request = null;
                envelope = null;
                androidHttpTransport = null;

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {

            }

Fiddlerを使用してVisualStudioとEclipseの呼び出しの違いを確認しましたが、どちらも呼び出しに対して異なるxmlを生成することがわかりました。Ksoapで正しいものを送信する方法がわかりません。

VisualStudioによる呼び出し-

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <User_Verification xmlns="http://softco.org/"><MobileNo xmlns="">01234567899</MobileNo><Password xmlns="">abcdef</Password></User_Verification></s:Body></s:Envelope>

EclipseAndroidプロジェクトからの呼び出し

    <?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><User_Verification xmlns="http://softco.org" id="o0" c:root="1"><MobileNo i:type="d:string">01234567899</MobileNo><Password i:type="d:string">abcdef</Password></User_Verification></v:Body></v:Envelope>

どんなポインタも大いに役立ちます。

4

2 に答える 2

1

他の誰かが同じ状況で立ち往生していてサポートが必要かどうかを確認するために、ここに答えがあります。

  1. たとえば、PropertyInfoクラスを使用して渡されるパラメータを初期化します。

    PropertyInfo loginProcPI = new PropertyInfo();
    // loginProcPI.setNamespace(NAMESPACE);
    loginProcPI.setName("MobileNo");
    loginProcPI.setValue("0123456789");
    loginProcPI.setType(String.class);
    
    request.addProperty(loginProcPI);
    
  2. 同じシーケンスで以下の2つのプロパティを設定します(ばかげているように聞こえるかもしれませんが、それが私の問題の解決方法です)

    envelope.setAddAdornments(false);
    envelope.implicitTypes = true;
    

それが役に立てば幸い!

于 2013-03-05T06:26:30.357 に答える
0

私は以下を使用して解決しました:

envelope.dotNet=true;

これはソースです:http ://articlesforprogramming.blogspot.com/2013/06/consume-net-webservice-in-android-using.html

于 2018-08-24T07:07:06.080 に答える