-2

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

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

4

2 回答 2

4

XML-RPC.NET 文档

2.4 如何设置代理方法调用的超时时间?

代理类派生自 IXmlRpcProxy,因此继承了 Timeout 属性。这需要一个整数,它以毫秒为单位指定超时。例如,要设置 5 秒超时:

ISumAndDiff proxy = XmlRpcProxyGen.Create<ISumAndDiff>();
proxy.Timeout = 5000;
SumAndDiffValue ret = proxy.SumAndDifference(2,3);
于 2013-11-13T13:46:49.307 回答
1

值得注意的是,这不适用于异步模型。为此,我会查看这篇文章,因为这帮助我克服了这个问题。

例如

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!");
    }
}
于 2015-11-20T14:40:40.973 回答