我正在尝试使用 C# (.NET 3.5) 中的 XML-RPC Web 服务。如果它在 15 秒内没有响应,我希望请求超时,以便我可以尝试联系备份 Web 服务。
我正在使用CookComputing.XmlRpc
客户端。
我正在尝试使用 C# (.NET 3.5) 中的 XML-RPC Web 服务。如果它在 15 秒内没有响应,我希望请求超时,以便我可以尝试联系备份 Web 服务。
我正在使用CookComputing.XmlRpc
客户端。
2.4 如何设置代理方法调用的超时时间?
代理类派生自 IXmlRpcProxy,因此继承了 Timeout 属性。这需要一个整数,它以毫秒为单位指定超时。例如,要设置 5 秒超时:
ISumAndDiff proxy = XmlRpcProxyGen.Create<ISumAndDiff>();
proxy.Timeout = 5000;
SumAndDiffValue ret = proxy.SumAndDifference(2,3);
值得注意的是,这不适用于异步模型。为此,我会查看这篇文章,因为这帮助我克服了这个问题。
例如
public interface IAddNumbersContract
{
[XmlRpcBegin("add_numbers")]
IAsyncResult BeginAddNumbers(int x, int y, AsyncCallback acb);
[XmlRpcEnd]
int EndAddNumbers(IAsyncResult asyncResult);
}
public class AddNumbersCaller
{
public async Task<int> Add(int x, int y)
{
const int timeout = 5000;
var service = XmlRpcProxyGen.Create<IAddNumbersContract>();
var task = Task<int>.Factory.FromAsync((callback, o) => service.BeginAddNumbers(x, y, callback), service.EndAddNumbers, null);
if (await Task.WhenAny(task, Task.Delay(timeout)) == task)
{
return task.Result;
}
throw new WebException("It timed out!");
}
}