从 Android 台设备访问 ASMX 网络服务
Access ASMX web service from an Android device
所以我已经将以下问题上传了几次,但并没有真正得到教程式的答案。这是我找到的解决此问题的方法:
我需要从 LAN 中的另一台设备(Android 设备)访问我的 asmx Web 服务,但它是 运行 在 Visual Studio 的本地主机上。如何将 HTTP 消息发送到另一台计算机上的 Web 服务?
所以我们需要做的是:
1) 创建您的 ASP 空 Web 应用程序,添加 ASMX Web 服务。转到项目的属性(Web 选项卡),然后选择 Web 服务作为启动操作(以防止它尝试打开配置文件)。在项目 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。找到 <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 等设置它。在这个阶段之后,您可以通过键入 http://YOUR_IP:YOUR_PORT/YOUR_WEB_SERVICE_NAME.asmx/FUNCTION 并确保它 returns 是一个有效值来测试网络服务。
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 class 中的代码如下:
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 函数)并将其保存到局部变量(response)。
就是这样!希望这一切对你有用。
所以我已经将以下问题上传了几次,但并没有真正得到教程式的答案。这是我找到的解决此问题的方法:
我需要从 LAN 中的另一台设备(Android 设备)访问我的 asmx Web 服务,但它是 运行 在 Visual Studio 的本地主机上。如何将 HTTP 消息发送到另一台计算机上的 Web 服务?
所以我们需要做的是:
1) 创建您的 ASP 空 Web 应用程序,添加 ASMX Web 服务。转到项目的属性(Web 选项卡),然后选择 Web 服务作为启动操作(以防止它尝试打开配置文件)。在项目 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。找到 <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 等设置它。在这个阶段之后,您可以通过键入 http://YOUR_IP:YOUR_PORT/YOUR_WEB_SERVICE_NAME.asmx/FUNCTION 并确保它 returns 是一个有效值来测试网络服务。
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 class 中的代码如下:
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 函数)并将其保存到局部变量(response)。
就是这样!希望这一切对你有用。