2011-11-28 52 views
0

我正在開發一個應用程序以使用httpconnection將某些數據獲取到.Net Webservice。當我在本地託管Web服務並使用Eclipse模擬器測試它時,代碼工作正常,但是當我在公共部署服務器上託管Web服務並將Blackberry應用程序打包到我的設備時,所得到的是一個respose代碼500。給我一個線索,一個答案或解決什麼migth造成這個?BlackBerry Httpconnection發佈到.Net Webservice不能在設備上工作

下面是我使用的代碼:

String URL = WebServiceURL+"/Login"+getConnectionParameter(); 

public static String getConnectionParameter() { 
    String ConnectionParameter ="" ; 
    if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) { 
     // Connected to a WiFi access point 
     ConnectionParameter = ";interface=wifi"; 
    } else { 
     int coverageStatus = CoverageInfo.getCoverageStatus(); 
     ServiceRecord record = getWAP2ServiceRecord(); 
     if (record != null && (coverageStatus & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT) { 
      // Have network coverage and a WAP 2.0 service book record 
      ConnectionParameter = ";deviceside=true;ConnectionUID="+ record.getUid(); 
     } else if ((coverageStatus & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS) { 
      // Have an MDS service book and network coverage 
      ConnectionParameter = ";deviceside=false"; 
     } else if ((coverageStatus & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT) { 
      // Have network coverage but no WAP 2.0 service book record 
      ConnectionParameter = ";deviceside=true"; 
     } 
    } 
    return ConnectionParameter; 
} 

URLEncodedPostData oPostData = new URLEncodedPostData(
       URLEncodedPostData.DEFAULT_CHARSET, false); 
       oPostData.append("username",username.getText()); 
       oPostData.append("compressedpicture",HomeScreen.convertByteArrayToString(imageArray)); 
       oPostData.append("email",email.getText()); 
       oPostData.append("password",password.getText()); 
       oPostData.append("pin",pin.getText()); 
       oPostData.append("extension",extension); 
       String URL = MYAPP.WebServiceURL+"/SignUp"+MYAPP.getConnectionParameter(); 
       String result = HomeScreen.postinfo(URL,oPostData); 
       Dialog.inform(result); 
       if(result.indexOf("success")!= -1){ 
        Dialog.inform("You Have just sign up. Congratulations."); 
       }else{ 
        Dialog.inform("There is an issue registering you"); 
       } 




public static String postinfo(String _URL,URLEncodedPostData _PostData) { 
    String result = ""; 
    try { 
     HttpConnection conn = (HttpConnection) Connector.open(_URL, 
       Connector.READ_WRITE); 
     if (_PostData != null) { 
      conn.setRequestMethod(HttpConnection.POST); 
      conn.setRequestProperty("Content-type", 
        "application/x-www-form-urlencoded"); 
      conn.setRequestProperty("Content-Length", 
        Integer.toString(_PostData.size())); 
      OutputStream strmOut = conn.openOutputStream(); 
      strmOut.write(_PostData.getBytes()); 
      strmOut.close(); 
     } else { 
      conn.setRequestMethod(HttpConnection.GET); 
     } 

     int responseCode = conn.getResponseCode(); 
     if (responseCode == HttpConnection.HTTP_OK) { 
      InputStream data = conn.openInputStream(); 
      StringBuffer raw = new StringBuffer(); 
      byte[] buf = new byte[4096]; 
      int nRead = data.read(buf); 
      while (nRead > 0) { 
       raw.append(new String(buf, 0, nRead)); 
       nRead = data.read(buf); 
      } 
      result = raw.toString(); 
      //Dialog.alert("Result:" + raw.toString()); 
      //_Dest.updateDestination(raw.toString()); 
     } else { 

      _Dest.updateDestination("responseCode=" 
        + Integer.toString(responseCode)); 
      result = "responseCode= "+ Integer.toString(responseCode); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     //_Dest.updateDestination("Exception:" + e.toString()); 
     result = "Exception:" + e.toString(); 
    } 
    return result; 
} 
+0

你有服務器響應,所以這意味着BB網絡工作正常。我建議檢查服務器日誌的問題原因。 –

+0

感謝Arhimed當前正在處理 –

+0

我在IIS服務器上獲得了以下日誌。 Idont知道這意味着什麼:2011-11-29 16:13:41 myIP POST /myapp/WebService1.asmx/Login - 80 - IP - 500 0 0 218 –

回答

0

感謝您的所有建議夥計們。我欣賞他們。由於我的URL末尾有/ WebserviceMethod,我發現我的生產服務器正在拋出內部服務器錯誤500。

String URL = WebServiceURL+"**/Login**"+getConnectionParameter(); 

我找到了一個使用KSOAP2的解決方案。它工作得很好。雖然你可能會寫一些代碼來處理解析的響應格式(KSOAP2返回解析的響應XML格式)。

相信你會找到文章在此鏈接有用: KSoap Android Web Service Tutorial With Sample Code

它適用於大多數基於J2ME的移動平臺。

再次感謝大家的時間和幫助。

0

的第一件事,不要使用標誌一樣,因爲他們有時給奇怪的結果。檢查連接類型的方式是通過CoverageInfo類:

CoverageInfo.isCoverageSufficient(CoverageInfo.COVERAGE_BIS_B); 
CoverageInfo.isCoverageSufficient(CoverageInfo.COVERAGE_MDS); 
//... 

其次,我想你前人的精力檢查網址後綴(在你的代碼命名ConnectionParameter,BTW這個名稱不符合Java命名約定)是在設備上正確初始化,因爲我認爲你錯過了一些選擇(如BIS和其他很少使用的WAP和APN選項)。這可能會給你提示問題出在哪裏。

要檢查代碼沒有問題,可以在BlackBerry瀏覽器中鍵入URL以查看結果是否相同。

最後,HTTP 500是一個服務器錯誤,所以問題也可能與服務器有關。

更新:除非您正在爲舊設備編程,否則應該使用ConnectionFactory類來處理您的URL和後綴。它是在OS 5.0上添加的。

+0

ConnectionParameter方法提供了一個很好的返回值,並將其作爲後綴附加到連接字符串。它運行良好,當我使用模擬器和本地部署的web服務在本地進行測試時。問題是,我的設備無法正常工作。當從我的BB瀏覽器測試web服務時,我得到了正確的web服務頁面。仍然需要更多的建議。 –

+0

好的,所以問題出在您的應用程序上,因爲服務器可從設備到達。然後檢查設備上的調試後綴值。 –

+0

我在我的IIS服務器上得到了以下日誌:2011-11-29 16:13:41 myIP POST /myapp/WebService1.asmx/Login - 80 - IP - 500 0 0 218 –

相關問題