Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对.NET web服务的调用超时(Android开发人员使用KSOAP2)_.net_Android_Web Services_Eclipse_Visual Studio 2010 - Fatal编程技术网

对.NET web服务的调用超时(Android开发人员使用KSOAP2)

对.NET web服务的调用超时(Android开发人员使用KSOAP2),.net,android,web-services,eclipse,visual-studio-2010,.net,Android,Web Services,Eclipse,Visual Studio 2010,我在尝试调用.NETWeb服务方法时遇到Java套接字异常“操作超时”。我已经跟随了网络上的许多例子,让我的android调用.NETWeb服务 我正在调试模式下使用VS2010运行web服务。我调用的web方法非常简单-->“string GetVersion()” 我读过一些文章,认为eclipse需要配置为通过修改窗口菜单项中的代理首选项“preferences->General->Network Connections”来访问internet。我还没有弄清楚我需要在代理中配置什么才能让事

我在尝试调用.NETWeb服务方法时遇到Java套接字异常“操作超时”。我已经跟随了网络上的许多例子,让我的android调用.NETWeb服务

我正在调试模式下使用VS2010运行web服务。我调用的web方法非常简单-->“string GetVersion()”

我读过一些文章,认为eclipse需要配置为通过修改窗口菜单项中的代理首选项“preferences->General->Network Connections”来访问internet。我还没有弄清楚我需要在代理中配置什么才能让事情正常工作,如果这是个问题的话

我还尝试从android访问.NETWeb服务根页面(service.asmx),但没有成功。我可以在本地机器上使用IE访问asmx页面,没有问题。我已经关闭了防火墙,这也没有解决任何问题。这是我第一次尝试在调试模式下使用VS2010从远程计算机访问web服务

我不知道在eclipse端或VS2010端是否存在配置问题

我还运行Windows 7 Home Premium

有什么想法吗

下面是一段代码片段

private static final String SOAP_ACTION = "http://192.168.1.151/MyWebService/GetVersion";
private static final String METHOD_NAME = "GetVersion";   
private static final String NAMESPACE = "http://192.168.1.151/MyWebService"; 
private static final String URL = "http://192.168.1.151/MyService.asmx";

private void Connect()
{
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

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

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

    System.out.println("DEBUG >> HttpTransport.call()");

    try
    {         
       androidHttpTransport.call(SOAP_ACTION, envelope);
    }
    catch(IOException iexc)
    {
     System.out.println("EXCEPTION >> " + iexc.toString());
    }
    catch(XmlPullParserException xexc)
    {
     System.out.println("EXCEPTION >> " + xexc.toString());
    }

    try
    {
       Object result = (Object)envelope.getResponse();

       tv.setText(result.toString());
    }
    catch (SoapFault sp)
    {
     System.out.println("EXCEPTION >> " + sp.toString());
    }
}

如果您在VS2010的调试模式下运行.Net web服务,那么您很可能正在运行一个名为Cassini的web服务器。不幸的是,无法远程访问卡西尼号托管的站点:


当然,您可以做一些工作来克服这个限制。

尝试将服务部署到IIS。

从获取“ksoap2android”jar文件

将其添加为Eclipse项目中的“添加外部JAR”

然后使用AndroidHttpTransport对象,如下面的代码段所示:

try 
        {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
            request.addProperty("a", "15");
            request.addProperty("b", "20");
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet=true; 
            envelope.setOutputSoapObject(request);
            AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
            returnMessage = result.toString();
        }
        catch (SoapFault sf){
            returnMessage = "FAULT:\n";
            String faultString = "Code: " + sf.faultcode + "\nString: " +
            sf.faultstring;
            Log.d(TAG , "fault : " + faultString);
            returnMessage += faultString;
        }
        catch( Exception e )
        {
            Log.d(TAG , "exception e = "+ e.getMessage());
            returnMessage = "Call Exception:" + e.toString();
        }


    return returnMessage;


希望这有帮助。

如果您在android中调用Web服务时遇到问题,那么 您可以使用以下代码调用web服务并获取响应。请确保您的web服务以数据表格式返回响应。如果您使用SQL Server数据库中的数据,此代码将帮助您。如果您使用MYSQL,您需要更改一件事,只需替换word即可NewDataSet来自句子
obj2=(SoapObject)obj1.getProperty(“NewDataSet”)文档元素

private static final String NAMESPACE = "http://tempuri.org/"; 
private static final String URL ="http://localhost/Web_Service.asmx?";// you can use   IP address instead of localhost
private static final String METHOD_NAME = "Function_Name";
private static final String SOAP_ACTION = NAMESPACE+METHOD_NAME;

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
request.addProperty("parm_name",prm_value);// Parameter for Method
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);//call the eb service Method
} catch (Exception e) {
e.printStackTrace();}//Next task is to get Response and format that response
SoapObject obj,obj1,obj2,obj3;
obj= (SoapObject) envelope.getResponse();
obj1=(SoapObject) obj.getProperty("diffgram");
obj2=(SoapObject) obj1.getProperty("NewDataSet");
for(int i=0;i<obj2.getPropertyCount();i++)//the method getPropertyCount() return the number of rows
{
obj3=(SoapObject) obj2.getProperty(i);  
obj3.getProperty(0).toString();//value of column 1
obj3.getProperty(1).toString();//value of column 2
//like that you will get value from each column
}
private静态最终字符串命名空间=”http://tempuri.org/"; 
私有静态最终字符串URL=”http://localhost/Web_Service.asmx?";// 您可以使用IP地址而不是本地主机
私有静态最终字符串方法\u NAME=“函数\u NAME”;
私有静态最终字符串SOAP\u ACTION=名称空间+方法\u名称;
SoapObject请求=新的SoapObject(名称空间、方法名称);
request.addProperty(“parm_name”,prm_value);//方法参数
SoapSerializationEnvelope=新的SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet=true;
envelope.setOutputSoapObject(请求);
HttpTransportSE androidHttpTransport=新的HttpTransportSE(URL);
试一试{
androidHttpTransport.call(SOAP_操作,信封);//调用eb服务方法
}捕获(例外e){
e、 printStackTrace();}//下一个任务是获取响应并格式化该响应
SoapObject obj、obj1、obj2、obj3;
obj=(SoapObject)envelope.getResponse();
obj1=(SoapObject)obj.getProperty(“diffgram”);
obj2=(SoapObject)obj1.getProperty(“NewDataSet”);

对于(int i=0;iThanks获取信息。我将尝试让我的android查看根asmx页面。我意识到我没有提到我通过eclipse的android应用程序在本地计算机上作为调试模式下运行的web服务。这是不可能的,android(作为模拟器和设备)是它自己的主机,因此您将无法使用
localhost
连接到您的电脑。