使用 SOAP 协议时,是否可以使用 SOAP 取消挂起的远程函数调用?
我看到三种不同的情况:
A) 向需要很长时间才能完成的服务发出请求。例如,当复制包含大量文件的目录时,可以取消文件复制循环吗?
B) 发出一个返回长列表的请求。例如,当查询一个很大的内存用户名列表时,这个列表响应的传输可以取消吗?
C) 取消仍在内部呼叫队列中的呼叫;换句话说,在服务器开始处理它之前。在短时间内发出大量异步调用时,可能会发生这种情况。
使用 SOAP 协议时,是否可以使用 SOAP 取消挂起的远程函数调用?
我看到三种不同的情况:
A) 向需要很长时间才能完成的服务发出请求。例如,当复制包含大量文件的目录时,可以取消文件复制循环吗?
B) 发出一个返回长列表的请求。例如,当查询一个很大的内存用户名列表时,这个列表响应的传输可以取消吗?
C) 取消仍在内部呼叫队列中的呼叫;换句话说,在服务器开始处理它之前。在短时间内发出大量异步调用时,可能会发生这种情况。
从客户端的角度来看,取消同步(请求-响应)SOAP 调用与任何其他 HTTP 调用相同 - 只需断开连接并停止侦听响应即可。编写良好的服务器会在进行冗长的操作之前检查客户端是否仍然连接(例如,在 .NET 中,服务器会检查IsClientConnected),如果没有,则应取消操作。
但是,单向呼叫不能以这种方式取消,因为您已经发送了有效负载并断开了连接。取消单向调用需要显式调用 SOAP 服务上的某种取消方法,它必须显式支持。