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

时间:2013-04-18 01:59:23

标签: c# wcf asynchronous

C#ASP.NET 3.5

是否有可能“触发并忘记”非异步或单向的Web服务中的方法?

有一种方法可以返回一个值(在一些处理之后),这是我不需要的。它由另一个组(编写服务的人)使用。基本上,它只是通知用户x做了动作y。我只需要调用方法并继续操作而不等待结果。

我尝试将BackgroundWorker()与RunWorkerAsync一起使用,但该方法由于某种原因不会触发。我无法更改Web服务方法,因为我无法访问其代码。我应该使用BackgroundWorker,Invoke,ThreadPool,还有其他什么?我不需要返回结果,我不需要知道它是否失败。基本上,调用方法,如果它工作,很好。如果没有,我不想停止或减慢处理速度。

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....
}

3 个答案:

答案 0 :(得分:1)

您可以尝试以下

,而不是使用后台工作程序
    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....
    }

答案 1 :(得分:1)

根据定义IS WCF OneWay请求的功能。完全无法在客户端实现所需的行为。

默认情况下,IIS(一个常见的WCF服务主机)可以杀死被关闭连接启动的任何进程。这意味着客户端必须在进程持续时间内保持连接(这实际上意味着等待结果)。此外,请求可能会超时并且“即发即弃”过程被终止。

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

你还必须学习APM编程模型(非常讨厌)。

或者,您可以在单独的线程上运行WCF调用。但请注意,这会占用大量额外资源。

答案 2 :(得分:-1)

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