需求:执行一些耗时的操作,如发邮件、大量sql操作,客户端提交后能立即返回执行已开始的提示,且不需要把结果返回给客户端。目前想到的方法有两个:
1、ajax异步:但需求并不需要客户端显示执行结果,用ajax有点多余,安全性也会有一定折扣
2、把操作做在一个ashx文件,用服务端的HttpWebRequest、EndGetResponse服务端的异步url调用:此方法需要做一个ashx文件供调用,感觉还是有点画蛇添足,不够优雅。还有更完美一些的方法吗?谢谢!

解决方案 »

  1.   

    WCF 提交给服务端,有不需要返回结果和返回结果2种 应该能够满足你的需求
      

  2.   

    只想到ajax  不显示结果,那关闭浏览器怎么办?
      

  3.   

    最简单的办法,放一个 隐藏的iframe 让它提交或者<script> 等具有 src 属性的都可以
      

  4.   

    如果是.net,一般是这样做
    1.把操作做在ashx文件上,一般做成switch case,根据请求的参数执行不同的操作。
    2.客户端用js生成ajax对象异步调用ashx文件执行操作。ajax与返不返回结果有什么联系?
      

  5.   


    1、我现在的问题是,不想用一个单独的ashx文件,而能否像一般的同步方法那样直接把操作写在类里面。这样程序显得自我感觉更加优雅。
    2、ajax的客户端+服务端,既然我客户端不需要等待结果,例如提交后马上就显示“操作已经提交,您可以关闭浏览器了”,这时用ajax就显得有点多余了。
      

  6.   

    你还是先了解一下 ajax 把
      

  7.   


    请高手先看清楚问题,我问的是如何不用调用一个单独的ashx来实现异步,而用纯服务端编程实现。
    ajax异步调用已懂,谢谢
      

  8.   

    ashx 是什么? 什么是服务器端编程?
      

  9.   

    "不需要客户端显示执行结果,用ajax有点多余,安全性也会有一定折扣"
    这个判定我非常不认同!!
    毫无根据!!
    难道在WEB编程里,
    还有比ajax更简洁更不多余的东西吗???
      

  10.   

    又是这个问题。我在此重申,ASP.NET中不推荐开线程执行耗时的操作。因为AppDomain和Application Pool都有回收可能。除非你都了解了什么情况下会回收,配置好了保证你的程序不会意外回收掉AppDomain和Application Pool,那没问题,否则出了问题又不知道是怎么回事,怎么办?
    推荐方法是,browser->ASP.NET->调用web service->web service执行耗时操作,并且web service宿主进程需要脱离w3wp。查询进度或者结果同样通过web servcie调用。
      

  11.   

    我也想不出来用AJAX怎么就不安全了,
    难道WEB编程里,
    还有什么方式是脱离httpRequest对象而提交的吗?
      

  12.   

    兄弟,我说的那个方法已经是比较简洁和优雅的了。
    我也想同问“还有什么方式是脱离httpRequest对象而提交的吗?”
      

  13.   

    还有什么方式是脱离httpRequest对象而提交的吗?
    让然有。比如Silverlight clientHTTP browser stack直接调用操作系统WinINet API。