是否可以从.asmx Web服务方法下载原始XML?

时间:2012-07-23 15:55:29

标签: android xml web-services asmx

我创建了几个类型为.asmx(.NET)的Web服务,从本地MySQL数据库获取数据并在浏览器中将其显示为XML。这已经开始运行了。

我想解析所说的XML并将其显示在我正在处理的Android应用程序中。由于MySQL数据库每个月只会更新几次,所以每次我想在Android应用程序中显示数据时都不需要查询Web服务(以及MySQL数据库)。

我认为下载由我的Web服务返回的XML并将其存储在Android文件系统上并从那里解析它是有意义的。这只是令人难以置信的倒退还是可行的?

当我在

访问我的一个本地Web服务方法时
http://localhost/../WebService.asmx/GetLastDBUpdate

它返回一个时间戳,指示数据库上次在浏览器中被更改为XML的时间,但我无法弄清楚如何下载文件原始XML文件。

我可以这样做,还是应该这样做?

欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

执行同步的一种简单方法是将上次更新的时间戳传递给服务器。然后,服务器提供空响应(无更新),或者自该时间戳以来更新的对象列表。在这两种情况下,它都会提供一个新的时间戳,因此客户端不必与服务器保持同步。

  1. 请求POST /WebService.asmx/GetUpdates

    <GetUpdates>
        <Timestamp>2012-07-19T13:42:13Z</Timestamp>
        <UpdateNow>True</UpdateNow>
    </GetUpdates>
    

    如果该客户端没有先前的更新,则传递空时间戳,或将其保留。将UpdateNow设置为False,以查看是否有任何更新(<Objects>将始终为空)。

  2. 响应

    <Updates>
        <Timestamp>2012-07-23T17:54:13Z</Timestamp>
        <Count>23</Count>
        <Objects>
            <Object>...</Object>
            <Object>...</Object>
            ...
        </Objects>
    </Updates>
    

    <Updates>
        <Timestamp>2012-07-19T13:42:13Z</Timestamp>
        <Count>0</Count>
        <Objects/>
    </Updates>
    

    <Timestamp>可以是请求的时间,也可以是最新更新的时间。

  3. 进程:解析XML,并将其写入SQLite database。保存时间戳以供将来更新。


  4. 要向网络服务提出实际请求,您可以使用kSoap2 for Android

    public SoapObject GetUpdates(String timestamp, boolean updateNow) {
        SoapObject request = new SoapObject("http://tempuri.org/", "GetUpdates");
        request.addProperty("Timestamp", timestmap);
        request.addProperty("UpdateNow", updateNow ? "True" : "False");
    
        SoapSerializationEnvelope envelope =
                new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);
    
        HttpTransportSE transport = new HttpTransportSE(
                "http://www.example.com/WebService.asmx/GetUpdates");
        transport.call("GetUpdates", envelope);
    
        return (SoapObject) transport.bodyIn;
    }