所以我上傳了以下問題幾次,並沒有真正得到一個教程類答案。以下是我發現的解決此問題的方法:從Android設備訪問ASMX網絡服務
我需要從LAN(Android設備)中的其他設備訪問我的asmx Web服務,但它在Visual Studio的本地主機上運行。如何將HTTP消息發送到位於不同計算機上的Web服務?
所以我上傳了以下問題幾次,並沒有真正得到一個教程類答案。以下是我發現的解決此問題的方法:從Android設備訪問ASMX網絡服務
我需要從LAN(Android設備)中的其他設備訪問我的asmx Web服務,但它在Visual Studio的本地主機上運行。如何將HTTP消息發送到位於不同計算機上的Web服務?
因此,我們需要做的是如下:
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),我們要做的第三件事是綁定的計算機的實際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你可以只寫*,但是又在你只想知道,而不是用它設置IP地址的Android應用EditText等。在這個階段之後,您可以通過輸入http://YOUR_IP:YOUR_PORT/YOUR_WEB_SERVICE_NAME.asmx/FUNCTION來測試webservice,並確保它返回一個有效值。
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的功能)和將其保存到本地變量(響應)。
就這樣!希望這一切都爲你工作。