如果这是一个基本问题,请提前道歉。如何在现有 WCF Web 服务中启动外部 Web 服务调用,而不是等待第三方服务返回响应,然后继续并退出该函数以允许我的 Web 服务立即返回值?
4 回答
您需要异步调用外部服务。根据您使用的框架版本,有不同的选项。如果您使用的是 4.5,请查看异步:http: //msdn.microsoft.com/en-us/library/vstudio/hh156513.aspx
我们目前正在做类似的事情——使用 RestSharp 从 WCF 异步调用 restful 服务。看一个例子: Fire and Forget from within a WCF service
当您说“立即返回值”时,您是在说您希望对 WCF 服务本身的调用是非阻塞的吗?所以它会立即返回给客户?如果是这样,您需要使您的 WCF 服务合同 OneWay。请参阅:http: //msdn.microsoft.com/en-us/library/ms733035.aspx 但是,您不能从 OneWay 服务返回值。
您可以运行一个异步方法,该方法将启动对第 3 方的调用,并实现第二个轮询方法,您可以使用该方法检查结果是否已返回并采取相应措施。
我们为导入文件做类似的事情。启动该过程并让客户端轮询更新。
如果 web 服务已经存在并且你无法控制它,我通常只是创建一个线程来处理函数调用。
但是,在 .Net 4.5 中,存在“异步”Web 服务函数调用。 如果您有权使用此功能,那将是首选解决方案
假设您不依赖第三方结果来计算您的返回值。
您需要按如下方式构建您的 Web 服务方法。它只是伪代码。
public bool YourMethod()
{
//this will be a non-blocking call
MakeAsyncCallToThirdParty();
return true;
}