Torreson 2013-11-18 11:46 采纳率: 0%
浏览 3340

Android用ksoap2调用WCF的问题,详细如代码。

用Java和WCF框架实现了一个Webservice,在浏览器中输入http://localhost:9999/cat?wsdl
得到:
//--------------------------------------------------

/wsdl:import






/wsdl:input


/wsdl:output
/wsdl:operation




/wsdl:input


/wsdl:output
/wsdl:operation
/wsdl:binding



/wsdl:port
/wsdl:service
/wsdl:definitions

//---------------------------------------------
然后ksoap2实现客户端调用代码:

package kxw;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
public class Test {

//命名空间  
private static final String NAMESPACE = "http://ws.cxf.kxw.org/";  
//Service地址  
private static final String URL = "http://localhost:9999/cat/HelloWorld.svc";

//需要调用的方法名  
private static final String METHOD= "sayHi";

//方法对应的Action
private static final String ACTION = "http://ws.cxf.kxw.org/cat/HelloWorld/sayHi";

public static void main(String[] args) {        
    //ISoapService service = new ISoapService("Torres");        
//  SoapObject result = service.LoadResult();                
//  System.out.println("WCF返回的数据是:" + result.getProperty(0));  

    System.out.print( testWCF("Ronaldo"));



}
 public static String  testWCF(String kxw)  {

        String result ="kxw";
    try {  


        //1.实例化SoapObject对象  
        SoapObject request = new SoapObject(NAMESPACE, METHOD);  
        //2.如果方法需要参数,设置参数  
        request.addProperty("arg0", kxw);
       // request.addProperty("strPassWordMd5", strPassWordMd5);
        //3.设置Soap的请求信息,参数部分为Soap协议的版本号  

        System.out.println("----------------");
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);  
        envelope.bodyOut=request;
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);     

        //4.构建传输对象  
        HttpTransportSE transport = new HttpTransportSE(URL);  
        transport.debug = true;               
        //5.访问WebService,第一个参数为调用方法的Aciton,第二个参数为Envelope对象  

        System.out.println("----------------");
        transport.call(ACTION, envelope); 

        System.out.printf("success!\n");
        //6.解析返回的数据  
     //  result = envelope.getResponse().toString();

    System.out.print( envelope.getResponse().toString()+"-----------");
}   catch (IOException e) {  

} catch (XmlPullParserException e) {  

}  
return result;

    }

}


1、 private static final String URL = "http://localhost:9999/cat/HelloWorld.svc";
改为:http://localhost:9999/cat/HelloWorld或者http://localhost:9999/cat

2、 private static final String ACTION = "http://ws.cxf.kxw.org/cat/HelloWorld/sayHi";改为http://ws.cxf.kxw.org/cat/sayHi

以上情况都是失败,请问有哪位大哥知道该怎么弄?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 13:42
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在使用KSOAP2调用WCF服务时,你需要确保URL和ACTION值正确。以下是修改后的代码示例:

    package kxw;
    
    import java.io.IOException;
    
    import org.ksoap2.SoapEnvelope;
    
    import org.ksoap2.serialization.SoapObject;
    
    import org.ksoap2.serialization.SoapSerializationEnvelope;
    
    import org.ksoap2.transport.HttpTransportSE;
    
    import org.xmlpull.v1.XmlPullParserException;
    
    public class Test {
        
        // Service address and action
        private static final String URL = "http://localhost:9999/cat/sayHi";
        private static final String ACTION = "http://ws.cxf.kxw.org/cat/sayHi";
    
        /**
         * Test method to demonstrate KSOAP2 usage.
         */
        public static void main(String[] args) {
            // SOAP object
            SoapObject request = new SoapObject(NAMESPACE, METHOD);
    
            // Add the required parameters
            request.addProperty("arg0", "Ronaldo");
    
            // Create a SOAP envelope for the request
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(request);
    
            // Create a HTTP transport client
            HttpTransportSE transport = new HttpTransportSE(URL);
    
            // Call the WCF service
            try {
                transport.call(ACTION, envelope);
                System.out.println(envelope.toString());
            } catch (IOException | XmlPullParserException e) {
                e.printStackTrace();
            }
    
            // Print the response
            System.out.println("Response received: " + envelope.getResponse());
        }
    }
    

    这个例子中,我将URL和ACTION值更改为"http://localhost:9999/cat/sayHi",因为这是当前可用的服务地址。同时,我创建了SoapObject对象,并添加了参数"arg0"。然后,我创建了一个SoapSerializationEnvelope并将其输出设置为true。最后,我创建了一个HttpTransportSE对象并调用了WCF服务。

    注意:这只是一个简单的示例,实际应用中可能还需要处理更多的错误情况和异常。

    评论

报告相同问题?