从Android设备访问ASMX网络服务

时间:2016-01-26 08:33:54

标签: android web-services iis asmx

所以我已经多次上传了以下问题,并没有真正得到教程的答案。以下是我发现解决此问题的方法:

我需要从局域网(Android设备)中的其他设备访问我的asmx Web服务,但它在Visual Studio的localhost上运行。如何将HTTP消息发送到另一台计算机上的Web服务?

1 个答案:

答案 0 :(得分:1)

所以我们需要做的是:

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

Project settings in Visual Studio 2013

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。找到<sites>标记,并在其中找到您项目的名称。更改<bindings>代码,使其如下所示:

<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服务{3}}并确保它返回有效值。

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函数)并将其保存到局部变量(响应)。

这就是全部!希望它能为你工作。

相关问题