【问题标题】:Access ASMX web service from an Android device从 Android 设备访问 ASMX Web 服务
【发布时间】:2016-01-26 08:33:53
【问题描述】:

所以我已经上传了几次以下问题,但并没有真正得到类似教程的答案。这是我找到的解决此问题的方法:

我需要从 LAN 中的不同设备(Android 设备)访问我的 asmx Web 服务,但它在 Visual Studio 的本地主机上运行。如何将 HTTP 消息发送到另一台计算机上的 Web 服务?

【问题讨论】:

    标签: android web-services iis asmx


    【解决方案1】:

    所以我们需要做的如下:

    1) 创建您的 ASP 空 Web 应用程序,添加一个 ASMX Web 服务。转到项目的属性(Web 选项卡),然后选择 Web 服务作为启动操作(以防止它尝试打开配置文件)。在 Project URL 行中根据需要更改端口并创建虚拟目录:

    2) 现在在我的项目中,我想添加对 POST 和 GET 消息的支持。为此,请转到 web.config 文件并在 <configuration> 标签内添加以下代码:

    <system.web>
        <webServices>
          <protocols>
              <add name="HttpGet"/>
              <add name="HttpPost"/>
          </protocols>
        </webServices>
    </system.web> 
    

    3) 我们要做的第三件事是将 localhost 与计算机的实际 IP 地址绑定。我的笔记本电脑有一个固定 IP (192.168.1.10),这使得应用程序的编程更简单,但任何 IP 都可以工作。转到您的文档文件夹,然后编辑 IISExpress/config/applicationhost.config。找到&lt;sites&gt; 标签,并在其中包含您的项目名称。更改&lt;bindings&gt; 标记,使其看起来像这样:

    <bindings>
         <binding protocol="http" bindingInformation="*:4250:192.168.1.10" />
         <binding protocol="http" bindingInformation="*:4250:localhost" />
    </bindings>
    

    现在你可以只写 * 而不是 192.168.1.10,但同样在 android 应用程序中你只想知道 IP 地址而不是使用 EditText 等设置它。在这个阶段之后,你可以通过输入 @ 来测试 web 服务987654322@ 并确保它返回一个有效值。

    4) 现在,为了阻止计算机的防火墙丢弃消息,您可以创建一个例外(在所选端口内)或关闭防火墙。否则,您的 android 应用程序将在 HTTP 消息的执行过程中卡住并等待超时(调试需要很长时间,因为它不会引发异常)。

    5) 构建你的 android 应用程序:我不会带来所有代码,但有一个按钮调用 AsyncTask 以发送 HTTP GET 消息。重要的是为应用添加权限:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    

    我的 AsyncTask 类中的代码如下:

    HttpClient client = new DefaultHttpClient();
                HttpGet get = new HttpGet("http://192.168.1.10:4250/WebService1.asmx/HelloWorld");
                HttpResponse httpresponse = client.execute(get);
                HttpEntity httpEntity = httpresponse.getEntity();
    
                if (httpresponse.getStatusLine().getStatusCode() == 200) {
                    InputStream is = httpEntity.getContent();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
                    String text;
                    while ((text = bufferedReader.readLine()) != null) {
                        response += text;
                    }
    

    它所做的基本上是获取返回的字符串(来自 HelloWorld 函数)并将其保存到局部变量(响应)中。

    就是这样!希望一切对你有用。

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2020-06-09
      • 1970-01-01
      相关资源
      最近更新 更多