Webサービスは、KSOAPメソッドを使用してアプリケーションからNULLパラメーターを受け取ります

StackOverflow https://stackoverflow.com/questions/3046489

質問

私はこれについて議論するトピックを見てきましたが、誰も解決策を投稿していないようです。現時点では、.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://が含まれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top