【问题标题】:Passing date to ASMX web service将日期传递给 ASMX Web 服务
【发布时间】:2014-09-24 19:03:23
【问题描述】:

我在 android 设备上使用 c# 编写的 asmx Web 服务。

我建立连接,当在某些网络方法中我需要整数或字符串,如输入参数时,一切都很好,但问题是当网络方法需要日期时,我尝试以多种格式发送日期,但我总是有问题得到答案.

我需要发送日期对象,还是类似字符串? Web 服务可以像其他东西一样查看日期吗?

这是与网络服务“通信”的方法:

public void connectSOAP() 
{
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    String dateStr = "04/05/2010"; 
    Date dateObj=null;
    SimpleDateFormat curFormater = new SimpleDateFormat("dd/mmm/yyyy"); 
    try 
    {
        dateObj = curFormater.parse(dateStr);
    } 
    catch (java.text.ParseException e1) 
    {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } 
    request.addProperty("dtFrom",dateObj);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

    envelope.setOutputSoapObject(request);
    envelope.dotNet = true;
    try 
    {
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.call(SOAP_ACTION, envelope);
        if (envelope.getResponse() != null) 
        {
            if (envelope.bodyIn instanceof SoapFault) 
            {
                String str = ((SoapFault) envelope.bodyIn).faultstring;
                Log.i("", str);
            } 
            else 
            {
                SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
                Log.d("WS", String.valueOf(resultsRequestSOAP));
            }    
        };
    } 
    catch (Exception e) 
    {
        Log.d("WS","sss");
    }
}

当我更改网络方法时(它的工作日期已过时),我会在日志中得到响应)但是当我在日志中得到捕获(“sss”)的日期时,我调试并发现它停止了: androidHttpTransport.call(SOAP_ACTION, 信封);

但我在日志中没有找到任何关于此的内容,除了我设置的 catch...

【问题讨论】:

  • 您在获得答案时遇到问题是什么意思?是根本不读还是读错了?不幸的是,这里没有很多事情要做......
  • 感谢您的建议,我更改了小问题,添加了代码...

标签: c# android web-services asmx date-parsing


【解决方案1】:

对我来说,这看起来像您要提供给 web 服务的 dateObj 无法解析,这就是为什么在这一行发生异常:

androidHttpTransport.call(SOAP_ACTION, envelope);

但是由于您的格式化程序具有这种格式:

SimpleDateFormat curFormater = new SimpleDateFormat("dd/mmm/yyyy"); 

也许(三个!)“嗯”导致错误?我很确定这会产生类似的东西,例如“Feb”代表二月等等。(例如“11/Feb/2014”):

尝试类似:

SimpleDateFormat curFormater = new SimpleDateFormat("dd/mm/yyyy"); 

SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy"); 

顺便说一句,为了避免本地化和互操作性问题,我经常使用精确格式化为字符串的 DateTime 对象来将该对象提供给 WebService。因为很多时候我遇到了互操作性问题,例如.asmx Webservice 和 J2EE Web 服务(例如,J2EE 和 .NET 的 DateTime 范围不同,如果它是 null/nil 值,您也会遇到麻烦)。

【讨论】:

  • 感谢回答,我尝试了多种格式(包括 yyyy-MM-dd,yyyy-MM-dd, yyyy-MM-dd HH:mm , yyyy-MM-dd HH:mm ,yyyy- MM-dd'T'HH:mm:ss.SSSZ 等...)仍然是同样的问题。所有其他没有 datetime 的方法都可以完美地“工作”,但是 Web 服务何时需要 date 参数不起作用。就像那个网络服务想要一件事并得到另一件事..我不知道该怎么做..
  • 您不能为该日期时间值切换到字符串类型?网络服务是你建的吗?您可以使用 SoapTraceExtension 查看尝试通信时“线路”上究竟发生了什么。我假设你得到了一个 SoapFault,它说明出了什么问题,但只有当你对 SOAP 消息使用 TraceExtension 时才能看到它(网上有很多例子:blog.encoresystems.net/articles/…
猜你喜欢
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多