C# 托管在IIS中的WCF web服务,为非.Net调用方创建Fire and Forget方法
我在IIS 7.5、.Net Framework 4.5.1中托管了WCF web服务。我需要一个由非.Net应用程序调用的fire-and-forget方法(我无法创建.Net代理) 这是“真正的火和忘记”。打电话的人不关心成功或失败 它是否像在Task.Run()中包装所有代码那样简单?这是否足够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(() => {
[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客户端将如何处理它,但您可以检查它。使用任务方法有一个非常明显的缺点——每次调用都会消耗一个线程,然后再添加一个调用,这会使线程池的使用率增加两倍。