【问题标题】:Cancel Service Call取消服务电话
【发布时间】:2014-01-08 07:24:52
【问题描述】:

我使用的是 WCF 服务,它不是异步服务。 我在其中进行数据库操作。数据库操作返回给我巨大的结果。 我想提供一种方法来取消我的客户的操作。 任何人都可以建议实现同样的目标。我google了很多 也可以找到一些解决方案,有些人说使服务操作异步。这是我从msdn得到的 http://msdn.microsoft.com/en-us/library/ms731177(v=vs.110).aspx 但是我该如何阻止它。 另外,由于我对此不熟悉,所以我无法弄清楚这件事。 谁能帮我解决这个问题。 提前致谢。

问候

【问题讨论】:

    标签: c# asp.net-mvc wcf


    【解决方案1】:

    您可以保持服务同步,但在方法内部进行异步调用,例如围绕数据库查询。在这种情况下,您可以使用支持 CancellationToken 的类 Task。但您应该使用 .NET 4 及更高版本。

    【讨论】:

    • WCF 任务不支持取消。
    【解决方案2】:

    我只想取消服务调用(没有会话锁定(会话创建/更新/删除),您可以在javascript 中对服务进行 ajax 调用,例如:

       var xhr;
    
       var serviceUrl = "Service1.svc/GetData";
       xhr= $.ajax({
            type: "POST",
            url: serviceUrl,
            data: "{\"value\":\"request\"}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                //anything you need to do on success
            }
        });
    

    对于中止请求,您可以这样做:

      if(xhr && xhr.readystate != 4){
            xhr.abort();
        }
    

    请不要中止等待请求的处理程序而不是请求本身,如果您正在使用 Session(读取除外),它将无法工作并等待请求完成。

    如果您有上述情况,最好使用 vzayko 提到的Task

    此外,如果您使用的是 MVC 4,您还可以使用 TAP(Task-based Asynchronous Pattern),它专门针对在 ASP.net MVC 中使用任务进行了优化。

    【讨论】:

    • 我浏览了链接msdn.microsoft.com/en-us/library/ms731177(v=vs.110).aspx。但我无法实现取消。谁能告诉我该怎么做???
    • 它的异步调用。难道不能通过这个实现取消功能吗
    • 是的,这似乎是简单回调模式的服务实现。使用可以使用上面链接中的TaskTask-based Asynchronous Pattern
    • 不可能只有一种方法作为异步方法,因为我不想更改其余代码。
    • 是不是只有.Net 4.5才支持Task
    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多