我正在尝试使用C#(.NET 3.5)中的XML-RPC Web服务。如果它在15秒内没有响应,我希望超时请求,以便我可以尝试联系备份Web服务。
我正在使用CookComputing.XmlRpc
客户端。
答案 0 :(得分:4)
2.4如何在代理方法调用上设置超时?
代理类派生自IXmlRpcProxy,因此继承了Timeout属性。这个 取一个整数,指定超时(以毫秒为单位)。对于 例如,设置5秒超时:
ISumAndDiff proxy = XmlRpcProxyGen.Create<ISumAndDiff>();
proxy.Timeout = 5000;
SumAndDiffValue ret = proxy.SumAndDifference(2,3);
答案 1 :(得分:1)
值得注意的是,这不适用于异步模型。要做到这一点,我会look at this post as this helped me overcome that problem.
例如
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!");
}
}