XML-RPC超时?

时间:2013-11-13 13:40:50

标签: c# xml-rpc xml-rpc.net

我正在尝试使用C#(.NET 3.5)中的XML-RPC Web服务。如果它在15秒内没有响应,我希望超时请求,以便我可以尝试联系备份Web服务。

我正在使用CookComputing.XmlRpc客户端。

2 个答案:

答案 0 :(得分:4)

来自XML-RPC.NET docs

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!");
    }
}