执行web服务方法并立即返回

本文关键字:返回 方法 web 服务 执行 | 更新日期: 2023-09-27 18:09:59

c# ASP。NET 3.5

是否有可能在web服务中"触发并忘记"非异步或单向的方法?

有一个方法返回一个值(经过一些处理),我不需要。它由另一个组(编写服务的组)使用。基本上,它只是通知用户x执行了操作y,我只需要调用该方法并继续执行,而不必等待结果。

我尝试使用BackgroundWorker()与RunWorkerAsync,但该方法不触发的某种原因。我无法更改web服务方法,因为我无法访问他们的代码。我应该使用后台工作,调用,线程池,别的东西吗?我不需要返回结果,也不需要知道它是否失败。基本上,调用这个方法,如果它有效,很好。如果没有,我不想停止或减慢处理速度。

public static void Test()
{
    var worker = new BackgroundWorker();
    worker.DoWork += Test2;
    worker.RunWorkerAsync(new object[] {12345, "test"});
}
private static void Test2(object sender, DoWorkEventArgs e)
{
   // Write to log that we got into the method - does not
   object[] args = e.Argument as object[];
   int num = Convert.ToInt32(args[0]);
   string name = (string)args[1];
   // call web service method here....
}

执行web服务方法并立即返回

你可以试试下面的

    public static void Test()
    {
        System.Threading.ThreadPool.QueueUserWorkItem(delegate
        {
            Test2(new object[] { 12345, "test" });
        });
    }
    private static void Test2(object data)
    {
        // Write to log that we got into the method - does not
        object[] args = data as object[];
        int num = Convert.ToInt32(args[0]);
        string name = (string)args[1];
        // call web service method here....
    }

根据定义,请求的功能是WCF单向。完全在客户端实现所需的行为是不可能的。

默认情况下,IIS (WCF服务的公共主机)允许杀死任何由关闭连接启动的进程。这意味着客户端必须在整个过程中保持连接(这实际上意味着等待结果)。此外,也有可能请求超时,"即发即弃"进程被终止。

如果你只是想减少在客户端占用的资源到最小,而请求是在飞行中,我将异步运行请求。如果你只能访问。net<=4.0,那么最简单的方法就是使用"添加服务引用"选项并勾选"生成异步方法"选项来生成异步调用(我的意思是APM异步,而不是async/await/TPL异步)。

您还必须学习APM编程模型(这是相当讨厌的)。

或者你可以在一个单独的线程上运行WCF调用。但是注意,这会使用大量的额外资源。

这里有一个关于asynn/Sync wfc调用的文档。http://msdn.microsoft.com/en-us/library/ms734701.aspx。