2010-09-04 87 views
1

嘗試調用.NET Web服務方法時,出現Java Socket異常「操作超時」。我跟着網上的很多例子來讓我的android調用一個.net的web服務。調用.NET Web服務超時(使用KSOAP2的Android開發)

我在調試模式下使用VS2010運行Web服務。我打電話的網絡方法非常簡單 - >「字符串GetVersion()」

我讀過一些文章,網絡連接「從窗口菜單項。我一直無法弄清楚在代理中需要配置什麼才能讓事情順利進行,如果這是問題所在。

我也嘗試從我的android訪問.net Web服務根頁面(service.asmx)沒有成功。我可以在本地計算機上使用IE訪問asmx頁面,而不會出現任何問題。我關掉了防火牆,但也沒有解決任何問題。這是我第一次在調試模式下使用VS2010運行時嘗試從遠程計算機訪問Web服務。

我不知道我是否在eclipse端或VS2010端有配置問題。

我也運行Windows 7家庭高級版。

任何想法?

下面的代碼片段...

private static final String SOAP_ACTION = "http://192.168.1.151/MyWebService/GetVersion"; 
private static final String METHOD_NAME = "GetVersion"; 
private static final String NAMESPACE = "http://192.168.1.151/MyWebService"; 
private static final String URL = "http://192.168.1.151/MyService.asmx"; 

private void Connect() 
{ 
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet=true; 
    envelope.setOutputSoapObject(request); 

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

    System.out.println("DEBUG >> HttpTransport.call()"); 

    try 
    {   
     androidHttpTransport.call(SOAP_ACTION, envelope); 
    } 
    catch(IOException iexc) 
    { 
    System.out.println("EXCEPTION >> " + iexc.toString()); 
    } 
    catch(XmlPullParserException xexc) 
    { 
    System.out.println("EXCEPTION >> " + xexc.toString()); 
    } 

    try 
    { 
     Object result = (Object)envelope.getResponse(); 

     tv.setText(result.toString()); 
    } 
    catch (SoapFault sp) 
    { 
    System.out.println("EXCEPTION >> " + sp.toString()); 
    } 
} 

回答

0

如果您在VS2010的調試模式下運行.NET Web服務上,你最有可能運行的卡西尼稱爲Web服務器。遺憾的是無法遠程訪問卡西尼主辦的網站:

當然你也可以做一些port forwarding來解決此限制。

+0

謝謝爲信息。我將嘗試一下,讓我的android看到根asmx頁面。我意識到我沒有提到我的android應用程序通過eclipse在本地機器上作爲以調試模式運行的Web服務。 – Omar 2010-09-05 00:20:43

+0

你使用的是http:// localhost url嗎? – 2010-09-29 02:38:35

+0

這是不可能的,Android(作爲模擬器和設備)是它自己的主機,所以你將無法使用'localhost'連接到你的電腦。 – 2010-09-29 16:47:59

0

嘗試將服務部署到IIS。

0

here獲取「ksoap2-android」jar文件。

將此添加爲Eclipse項目中的「添加外部JAR」。

然後使用AndroidHttpTransport對象作爲顯示在下面的代碼片斷:

try 
     { 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
      request.addProperty("a", "15"); 
      request.addProperty("b", "20"); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
      envelope.dotNet=true; 
      envelope.setOutputSoapObject(request); 
      AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL); 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      SoapPrimitive result = (SoapPrimitive)envelope.getResponse(); 
      returnMessage = result.toString(); 
     } 
     catch (SoapFault sf){ 
      returnMessage = "FAULT:\n"; 
      String faultString = "Code: " + sf.faultcode + "\nString: " + 
      sf.faultstring; 
      Log.d(TAG , "fault : " + faultString); 
      returnMessage += faultString; 
     } 
     catch(Exception e) 
     { 
      Log.d(TAG , "exception e = "+ e.getMessage()); 
      returnMessage = "Call Exception:" + e.toString(); 
     } 


    return returnMessage; 

希望這有助於。

0

如果我們就調用Web服務在安卓然後 您可以使用下面的代碼來調用Web服務,並得到響應。使確保Web服務返回數據表格式 ..This碼的響應有問題如果您使用來自SQL Server數據庫的數據,可以幫助您。如果您在使用MYSQL你需要改變的一件事只是從句子obj2=(SoapObject) obj1.getProperty("NewDataSet");替換詞NewDataSet DocumentElement

private static final String NAMESPACE = "http://tempuri.org/"; 
private static final String URL ="http://localhost/Web_Service.asmx?";// you can use IP address instead of localhost 
private static final String METHOD_NAME = "Function_Name"; 
private static final String SOAP_ACTION = NAMESPACE+METHOD_NAME; 

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
request.addProperty("parm_name",prm_value);// Parameter for Method 
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.dotNet = true; 
envelope.setOutputSoapObject(request); 
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
try { 
androidHttpTransport.call(SOAP_ACTION, envelope);//call the eb service Method 
} catch (Exception e) { 
e.printStackTrace();}//Next task is to get Response and format that response 
SoapObject obj,obj1,obj2,obj3; 
obj= (SoapObject) envelope.getResponse(); 
obj1=(SoapObject) obj.getProperty("diffgram"); 
obj2=(SoapObject) obj1.getProperty("NewDataSet"); 
for(int i=0;i<obj2.getPropertyCount();i++)//the method getPropertyCount() return the number of rows 
{ 
obj3=(SoapObject) obj2.getProperty(i); 
obj3.getProperty(0).toString();//value of column 1 
obj3.getProperty(1).toString();//value of column 2 
//like that you will get value from each column 
} 

如果您有任何關於這一點,你可以寫我的任何問題..