我目前正在开发一个REST服务,其中一种方法是长时间运行的任务(名为CalculatePrimeOneWay)。它的定义是WCF REST服务和状态轮询
[OperationContract(IsOneWay = true)]
[WebInvoke(Method = "POST", UriTemplate = "primeoneway/{jobnumber}")]
void CalculatePrimeOneWay(string jobnumber, Prime prime);
由于不存在与REST服务没有回调的能力,我认为有关实现一种轮询方法来获取状态信息。此轮询方法定义为
[OperationContract]
[WebGet(UriTemplate = "poll/{jobnumber}")]
Job GetJobStatus(string jobnumber);
我将状态信息写入MS SQL表。
我启动我的客户端并调用CalculatePrimeOneWay方法。随后对GetJobStatus的调用返回带有协议错误,状态码400和状态描述错误请求的WebException。 但是,如果CalculatePrimeOneWay完成,然后我调用GetJobStatus,所有工作都很好。
为什么我无法在CalculatePrimeOneWay仍在运行时调用GetJobStatus? 对于长时间运行任务和轮询机制的情况,还有哪些其他解决方案可能?
感谢
_“我的长时间运行任务和轮询机制的场景有什么其他解决方案?” - 您是否尝试搜索?让一个HTTP调用的持续时间超过几毫秒从来都不是一个好主意。 – CodeCaster
我没有搜索互联网,我发现的唯一可能的想法是这种轮询机制。由于长时间运行的方法被定义为OneWay,所以HTTP调用本身完成得非常快,我也可以在我的日志中看到。 –
你在使用per-session/singleton实例吗?或者您是否重新使用客户频道?或两者? –