Сообщение BlackBerry Http о подключении к.Net Webservice не работает на устройстве
Я разрабатываю приложение для использования httpconnection для передачи некоторых данных в.Net Webservice. Код работает нормально, когда я размещаю веб-сервис локально и тестирую его с помощью симулятора Eclipse, но когда я размещаю веб-сервис на общедоступном сервере развертывания и упаковываю приложение Blackberry на свое устройство, все, что я получаю, это код восстановления 500. Пожалуйста, кто-нибудь может дайте мне подсказку, ответ или решение о том, что мигрень вызывает это?
Ниже приведен код, который я использовал:
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;
}
2 ответа
Спасибо за все ваши предложения, ребята. Я ценю их всех. Я обнаружил, что мой рабочий сервер выдавал внутреннюю ошибку сервера 500 из-за /WebserviceMethod в конце моего URL, например
String URL = WebServiceURL+"**/Login**"+getConnectionParameter();
Я нашел решение, используя KSOAP2. Это сработало на отлично. Хотя вы можете написать несколько строк кода для обработки проанализированного формата ответа (KSOAP2 возвращает разобранный формат XML-ответа).
Я уверен, что вы найдете статью по этой ссылке полезной: Руководство по веб-сервису KSoap Android с примером кода
Это относится к большинству мобильных платформ на базе J2ME.
Еще раз спасибо всем за ваше время и помощь.
Во-первых, не используйте такие флаги, потому что они иногда могут давать странные результаты. Способ проверить тип соединения - через CoverageInfo
учебный класс:
CoverageInfo.isCoverageSufficient(CoverageInfo.COVERAGE_BIS_B);
CoverageInfo.isCoverageSufficient(CoverageInfo.COVERAGE_MDS);
//...
Во-вторых, я думаю, что вы должны проверить, что суффикс URL (по имени ConnectionParameter
в вашем коде, кстати, это имя не соответствует Java Naming Conventions) правильно инициализируется, когда на устройстве, потому что я думаю, что вы пропустили несколько параметров (например, BIS и другие редко используемые параметры WAP и APN). Это может дать вам подсказку о том, где проблема.
Чтобы убедиться, что с вашим кодом нет проблем, вы можете ввести URL-адрес в браузере BlackBerry, чтобы увидеть, совпадает ли результат.
Наконец, HTTP 500 - это ошибка сервера, поэтому проблема может иметь отношение и к серверу.
ОБНОВЛЕНИЕ: Если вы не программируете для старых устройств, вы должны использовать ConnectionFactory
класс, который обрабатывает URL-адреса и суффиксы для вас. Это было добавлено на OS 5.0.