Сообщение BlackBerry Http о подключении к .Net Webservice не работает на устройстве - PullRequest
0 голосов
/ 28 ноября 2011

Я разрабатываю приложение для использования 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 ]

0 голосов
/ 01 декабря 2011

Спасибо за все ваши предложения, ребята.Я ценю их всех.Я обнаружил, что мой рабочий сервер выдавал внутреннюю ошибку сервера 500 из-за / WebserviceMethod в конце моего URL, например

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

Я нашел решение, используя KSOAP2.Это сработало на отлично.Хотя вы можете написать несколько строк кода для обработки проанализированного формата ответа (KSOAP2 возвращает разобранный формат XML-ответа).

Уверен, вы найдете статью по этой ссылке полезной: KSoapУчебное пособие по веб-сервисам Android с примером кода

Применяется к большинству мобильных платформ на базе J2ME.

Еще раз спасибо всем за потраченное время и помощь.

0 голосов
/ 28 ноября 2011

Во-первых, не используйте такие флаги, потому что они иногда могут давать странные результаты. Способ проверки типа соединения - через класс CoverageInfo:

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

Во-вторых, я думаю, вы должны проверить, что суффикс URL (с именем ConnectionParameter в вашем коде, кстати, это имя не соответствует соглашениям об именах Java) инициализируется правильно, когда на устройстве, потому что я думаю, что вы пропустили несколько вариантов (например, BIS и другие редко используемые параметры WAP и APN). Это может дать вам подсказку о том, где проблема.

Чтобы убедиться, что с вашим кодом нет проблем, вы можете ввести URL-адрес в браузере BlackBerry, чтобы увидеть, совпадает ли результат.

Наконец, HTTP 500 - это ошибка сервера, поэтому проблема может быть связана и с сервером.

ОБНОВЛЕНИЕ: Если вы не программируете для старых устройств, вы должны использовать класс ConnectionFactory, который обрабатывает URL-адреса и суффиксы для вас. Он был добавлен в OS 5.0.

...