【问题标题】:BlackBerry Httpconnection post to a .Net Webservice not working on deviceBlackBerry Httpconnection 发布到 .Net Web 服务无法在设备上运行
【发布时间】:2011-12-01 15:13:09
【问题描述】:

我正在开发一个应用程序以使用 httpconnection 将一些数据获取到 .Net Web 服务。当我在本地托管 web 服务并使用 Eclipse 模拟器对其进行测试时,代码工作正常,但是当我在公共部署服务器上托管 web 服务并将黑莓应用程序打包到我的设备时,我得到的是一个响应代码 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;
}

【问题讨论】:

  • 你有服务器响应,所以这意味着 BB 网络工作正常。我建议检查服务器日志以了解问题原因。
  • 感谢 Arhimed 目前正在处理该问题
  • 我的 IIS 服务器上有以下日志。我不知道这意味着什么:2011-11-29 16:13:41 myIP POST /myapp/WebService1.asmx/Login - 80 - IP - 500 0 0 218
  • 除了服务器将您的 POST 请求发送到指定的 url、端口和指定的 IP 之外,这并不能说明什么。

标签: java blackberry blackberry-jde


【解决方案1】:

首先,不要使用这样的标志,因为它们有时会给出奇怪的结果。检查连接类型的方法是通过CoverageInfo 类:

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

其次,我认为您应该检查 URL 后缀(在您的代码中命名为 ConnectionParameter,顺便说一句,此名称不遵循 Java 命名约定)在设备上正确初始化,因为我认为您错过了一些选项(如 BIS 和其他很少使用的 WAP 和 APN 选项)。这可能会提示您问题出在哪里。

要检查您的代码是否有问题,您可以在黑莓浏览器中输入 URL 以查看结果是否相同。

最后,HTTP 500 是服务器错误,所以问题可能也与服务器有关。

更新:除非您正在为旧设备编程,否则您应该使用为您处理 URL 和后缀的 ConnectionFactory 类。它是在 OS 5.0 上添加的。

【讨论】:

  • ConnectionParameter 方法提供了良好的返回值并将其作为后缀附加到连接字符串中。当我使用模拟器和本地部署的 web 服务在本地测试它时,它运行良好。问题是它在我的设备上不起作用。从我的 BB 浏览器测试网络服务时,我得到了正确的网络服务页面。仍然需要更多建议。
  • 好的,所以问题出在您的应用程序中,因为可以从设备访问服务器。然后在设备上查看后缀值调试。
  • 我在 IIS 服务器上得到以下日志:2011-11-29 16:13:41 myIP POST /myapp/WebService1.asmx/Login - 80 - IP - 500 0 0 218
【解决方案2】:

感谢您的所有建议,伙计们。我很感激他们。我发现我的生产服务器抛出内部服务器错误 500,因为 /WebserviceMethod 在我的 URL 末尾,例如

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

我找到了使用 KSOAP2 的解决方案。它工作得很好。虽然你可能会编写一些代码行来处理解析的响应格式(KSOAP2 返回响应 XML 的解析格式)。

相信您会发现此链接中的文章很有用: KSoap Android Web Service Tutorial With Sample Code

它适用于大多数基于 J2ME 的移动平台。

再次感谢大家的宝贵时间和帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多