Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 托管在IIS中的WCF web服务,为非.Net调用方创建Fire and Forget方法_C#_Wcf_Iis 7.5_Fire And Forget - Fatal编程技术网

C# 托管在IIS中的WCF web服务,为非.Net调用方创建Fire and Forget方法

C# 托管在IIS中的WCF web服务,为非.Net调用方创建Fire and Forget方法,c#,wcf,iis-7.5,fire-and-forget,C#,Wcf,Iis 7.5,Fire And Forget,我在IIS 7.5、.Net Framework 4.5.1中托管了WCF web服务。我需要一个由非.Net应用程序调用的fire-and-forget方法(我无法创建.Net代理) 这是“真正的火和忘记”。打电话的人不关心成功或失败 它是否像在Task.Run()中包装所有代码那样简单?这是否足够 [OperationContract] public void FireAndForget(string stuffToSave) { Task.Run(() => {

我在IIS 7.5、.Net Framework 4.5.1中托管了WCF web服务。我需要一个由非.Net应用程序调用的fire-and-forget方法(我无法创建.Net代理)

这是“真正的火和忘记”。打电话的人不关心成功或失败

它是否像在Task.Run()中包装所有代码那样简单?这是否足够

[OperationContract]
public void FireAndForget(string stuffToSave)
{
    Task.Run(() =>
    {
        try 
        {
            LongRunningProcess.Save(stuffToSave);
        {
        catch(Exception ex)
        {
            LogError(ex);
        }
    }).ConfigureAwait(false);
}

我认为您甚至不需要这样做,因为客户可以呼叫您的服务,而无需等待任何响应。但是对于可能等待响应以查看服务器是否收到其请求的客户端,您可以简单地使用
Task.Run(()=>{/*code here*/})您可以考虑在操作契约中使用iSoeWale= true属性[操作契约(IsOnWale= true)]。这是实现所需的通常方法,而无需更改业务逻辑代码并将其与任务包装在一起。不确定非.NEt客户端将如何处理它,但您可以检查它。使用任务方法有一个非常明显的缺点——每次调用都会消耗一个线程,然后再添加一个调用,这会使线程池的使用率增加两倍。