【发布时间】:2016-01-26 08:33:53
【问题描述】:
所以我已经上传了几次以下问题,但并没有真正得到类似教程的答案。这是我找到的解决此问题的方法:
我需要从 LAN 中的不同设备(Android 设备)访问我的 asmx Web 服务,但它在 Visual Studio 的本地主机上运行。如何将 HTTP 消息发送到另一台计算机上的 Web 服务?
【问题讨论】:
标签: android web-services iis asmx
所以我已经上传了几次以下问题,但并没有真正得到类似教程的答案。这是我找到的解决此问题的方法:
我需要从 LAN 中的不同设备(Android 设备)访问我的 asmx Web 服务,但它在 Visual Studio 的本地主机上运行。如何将 HTTP 消息发送到另一台计算机上的 Web 服务?
【问题讨论】:
标签: android web-services iis asmx
所以我们需要做的如下:
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。找到<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 服务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 函数)并将其保存到局部变量(响应)中。
就是这样!希望一切对你有用。
【讨论】: