1

.netでWebサービスを開発しました。ここにあります

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class DataManipulationService : System.Web.Services.WebService
{
    [WebMethod]
    public void InsertData()
    {
        SQLConnectionManager conn = new SQLConnectionManager();

        string qry = "INSERT INTO TEST_TABLE(Id, Name) VALUES(3, 'Ibbi')";

        SQLOperationManager op = new SQLOperationManager(qry);
        int rowsAffected = op.ExecuteQuery();
    }
}

そして私はこのようにアンドロイドからこのウェブメソッドを呼び出そうとしています

public class WebDataManipulator {

private final String NAMESPACE = "http://tempuri.org/";
private final String URL = "http://localhost/DataManipulationService.asmx?WSDL";
private final String METHOD = "InsertData";
private final String SOAP_ACTION = "http://localhost/DataManipulationService.asmx?op=InsertData";

public void insertData() {
    SoapObject request = new SoapObject(NAMESPACE, METHOD);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);

    System.out.println(request);
    HttpTransportSE androidHttp = new HttpTransportSE(URL);


    try {
        androidHttp.call(SOAP_ACTION, envelope);
    } catch(Exception ex) {
        ex.printStackTrace();
    }
}

}

.netでWebサービスをテストしましたが、正常に動作していますが、Androidでこれを実行すると、何も起こりません。例外も機能もありません。なんで?これは私のlogcatです

08-11 11:09:12.269: I/AndroidRuntime(325): NOTE: attach of thread 'Binder Thread #3' failed
08-11 11:09:13.179: I/System.out(333): InsertData{}
08-11 11:09:13.229: W/System.err(333): java.net.SocketException: Permission denied
08-11 11:09:13.239: W/System.err(333):  at org.apache.harmony.luni.platform.OSNetworkSystem.socket(Native Method)
08-11 11:09:13.239: W/System.err(333):  at dalvik.system.BlockGuard$WrappedNetworkSystem.socket(BlockGuard.java:335)
08-11 11:09:13.239: W/System.err(333):  at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:216)
08-11 11:09:13.249: W/System.err(333):  at java.net.Socket.checkOpenAndCreate(Socket.java:802)
08-11 11:09:13.249: W/System.err(333):  at java.net.Socket.connect(Socket.java:948)
08-11 11:09:13.249: W/System.err(333):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:75)
08-11 11:09:13.249: W/System.err(333):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
08-11 11:09:13.249: W/System.err(333):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322)
08-11 11:09:13.249: W/System.err(333):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
08-11 11:09:13.249: W/System.err(333):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285)
08-11 11:09:13.249: W/System.err(333):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267)
08-11 11:09:13.249: W/System.err(333):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205)
08-11 11:09:13.249: W/System.err(333):  at org.ksoap2.transport.ServiceConnectionSE.connect(ServiceConnectionSE.java:76)
08-11 11:09:13.249: W/System.err(333):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:146)
08-11 11:09:13.249: W/System.err(333):  at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
08-11 11:09:13.249: W/System.err(333):  at com.automated.research.WebDataManipulator.insertData(WebDataManipulator.java:27)
08-11 11:09:13.259: W/System.err(333):  at com.automated.research.DataSender$1.run(DataSender.java:47)
08-11 11:09:13.259: I/System.out(333): connected

これが私がクライアントコードを書く方法です

if(isNetworkAvailable()) {
   WebDataManipulator webDM = new WebDataManipulator();
   webDM.insertData();
   System.out.println("connected");
}
4

2 に答える 2

1

webserviceurlは、Androidの観点からAndroidデバイスである「localhost」で始まります。localhostを、androiddeviceが認識できるIPアドレスに置き換えます(つまり、android web-browserから呼び出すことができます)

于 2012-08-11T06:31:46.730 に答える
0

私はここで私自身の質問に答えます、私はそれを機能させるために私がしたステップを書いています。

  1. IISでWebサービスを正しくホストしていることを確認してください。このリンクを参照できます。

    サービスをホストした後、マシンでサービスにアクセスできない場合は、手順2に従います。

  2. ここでは2つのことを行う必要があります。

    1. asp.netをIISマネージャーに表示します。こちらのリンクを参照してください。
    2. web.configファイルを変更し、httpGetとhttpPostを追加します。ここの例
  3. サービスがリモートマシンからWebメソッドを呼び出すことを許可します。こちらのリンクを参照してください。

  4. ファイアウォールがコンピュータへのアクセスをブロックしていないことを確認してください。新しいルールを定義するか、ファイアウォールを無効にして、それが機能することを確認できます。

上記の手順に従うことで、Androidデバイスでサービスを呼び出すことができます。

于 2012-08-12T07:44:19.493 に答える