0

iPhoneのSOAPコードまたは別の.Netクライアントから完全に呼び出されて機能しているASP.NetWebサービスがあります。ただし、Ksoap2を使用しようとすると、サービスに渡されるパラメーターが設定されません。WebMethodが最初に行うことは、文字列がnullまたは空であるかどうかをチェックし、「AuthenticationFailure」応答を返すことであるため、サービスではパラメータ「AuthenticationID」が入ってはなりません。私はその応答を受け取ったので、SOAPのものは問題なく、パラメーターだけが渡されていないことがわかりました。

public SoapObject soap(String METHOD_NAME, String SOAP_ACTION, String NAMESPACE, String URL) throws IOException, XmlPullParserException {
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      request.addProperty("AuthenticationID", "5");       
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet = true;
      envelope.setOutputSoapObject(request);  
      HttpTransportSE httpTransport = new HttpTransportSE(URL);  
      httpTransport.debug = true;  
      httpTransport.call(SOAP_ACTION, envelope); 
      SoapObject result=(SoapObject)envelope.getResponse(); 
      return result;
  }

また、WSDLは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <LookupStores xmlns="http://blah.com/Services/">
          <AuthenticationID>string</AuthenticationID>
          <NameMatch>string</NameMatch>
        </LookupStores>
      </soap:Body>
    </soap:Envelope>

簡単なサービスで、KSoap2を使えば簡単に利用できると思いました。ありがとう!

4

2 に答える 2

0

最初に確認する必要があるのは、WebServiceとAndroidアプリの名前空間文字列がまったく同じであることです。

于 2012-02-10T21:25:46.787 に答える
0

同様の問題があり、PropertyInfo を使用してパラメーターを渡すことができました。以下のコードを試してみてください。動作する保証はありませんが、試してみる価値はあります。

public SoapObject soap(String METHOD_NAME, String SOAP_ACTION, String NAMESPACE, String URL) throws IOException, XmlPullParserException 
{
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
    PropertyInfo pi = new PropertyInfo();
    pi.setName("int"); //change to appropriate type e.g. String
    pi.setValue(5); // if sString add the speech marks e.g. "5"
    pi.setType("AuthenticationID".getClass());                  
    request.addProperty(pi);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);  
    HttpTransportSE httpTransport = new HttpTransportSE(URL);  
    httpTransport.debug = true;  
    httpTransport.call(SOAP_ACTION, envelope); 
    SoapObject result=(SoapObject)envelope.getResponse(); 
    return result;
}  

お役に立てれば。

于 2010-12-23T01:36:30.037 に答える