C# Azure存储队列客户端的连接超时不起作用

C# Azure存储队列客户端的连接超时不起作用,c#,azure-storage-queues,C#,Azure Storage Queues,我想知道为什么我不能设置超时。如果我不能在几秒钟内将消息提交到队列,我宁愿取消尝试并进行指数级回退 不太漂亮,但也不履行其职责:( 如果我为存储帐户设置了错误的dns名称,则请求不会像预期的那样在3秒后超时 鉴于幕后有一个HttpClient,应该可以为http调用设置超时 CloudQueueClient cloudQueueClient = _cloudStorageAccount.CreateCloudQueueClient(); cloudQueueClient.DefaultRequ

我想知道为什么我不能设置超时。如果我不能在几秒钟内将消息提交到队列,我宁愿取消尝试并进行指数级回退

不太漂亮,但也不履行其职责:( 如果我为存储帐户设置了错误的dns名称,则请求不会像预期的那样在3秒后超时

鉴于幕后有一个HttpClient,应该可以为http调用设置超时

CloudQueueClient cloudQueueClient = _cloudStorageAccount.CreateCloudQueueClient();
cloudQueueClient.DefaultRequestOptions.ServerTimeout = TimeSpan.FromSeconds(3);
那也不行

同时,我看了一下Azure存储SDK的源代码:

namespace Microsoft.WindowsAzure.Storage.Shared.Protocol
{
    internal static class HttpClientFactory
    {
    [CompilerGenerated]
    [Serializable]
    private sealed class <>c
    {
        public static readonly HttpClientFactory.<>c <>9 = new HttpClientFactory.<>c();

        internal HttpClient cctor>b__3_0()
        {
            HttpClient expr_0B = new HttpClient(StorageAuthenticationHttpHandler.Instance, false);
            expr_0B.get_DefaultRequestHeaders().set_ExpectContinue(new bool?(false));
            expr_0B.get_DefaultRequestHeaders().get_UserAgent().Add(new ProductInfoHeaderValue("Azure-Storage", "8.5.0"));
            expr_0B.get_DefaultRequestHeaders().get_UserAgent().Add(new ProductInfoHeaderValue(Constants.HeaderConstants.UserAgentComment));
            expr_0B.get_DefaultRequestHeaders().TryAddWithoutValidation("x-ms-version", "2017-04-17");
            expr_0B.set_Timeout(Timeout.InfiniteTimeSpan);
            return expr_0B;
        }
    }

    private static Lazy<HttpClient> instance = new Lazy<HttpClient>(new Func<HttpClient>(HttpClientFactory.<>c.<>9.<.cctor>b__3_0));

    public static HttpClient Instance
    {
        get
        {
            return HttpClientFactory.instance.get_Value();
        }
    }
}
}
名称空间Microsoft.WindowsAzure.Storage.Shared.Protocol
{
内部静态类HttpClientFactory
{
[编译生成]
[可序列化]
私人密封c类
{
public static readonly HttpClientFactory.c 9=新的HttpClientFactory.c();
内部HttpClient cctor>b_uuu3_0()
{
HttpClient expr_0B=新的HttpClient(StorageAuthenticationHttpHandler.Instance,false);
expr_0B.get_DefaultRequestHeaders().set_ExpectContinue(new bool?(false));
expr_0B.get_DefaultRequestHeaders().get_UserAgent().Add(新产品InfoHeaderValue(“Azure存储”,“8.5.0”);
expr_0B.get_DefaultRequestHeaders().get_UserAgent().Add(新产品InfoHeaderValue(Constants.HeaderConstants.UserAgentComment));
expr_0B.get_DefaultRequestHeaders().tryadd无需验证(“x-ms-version”,“2017-04-17”);
expr\u 0B.设置超时(Timeout.InfiniteTimeSpan);
返回expr\u 0B;
}
}
private static Lazy instance=new Lazy(new Func(HttpClientFactory.c.9.b___3_0));
公共静态HttpClient实例
{
得到
{
返回HttpClientFactory.instance.get_Value();
}
}
}
}

因此,超时被设置为无限。我找不到任何将超时设置为其他值的位置。这可能是真的吗?-.-.-

尝试设置queueRequestOptions.MaximumExecutionTime。这是客户端超时。服务器超时被传递给服务,而不会在客户端强制执行


有关更多详细信息,请参阅。

感谢您指出,有一个内置的重试策略,“阻止”我们设置简单的超时值。
namespace Microsoft.WindowsAzure.Storage.Shared.Protocol
{
    internal static class HttpClientFactory
    {
    [CompilerGenerated]
    [Serializable]
    private sealed class <>c
    {
        public static readonly HttpClientFactory.<>c <>9 = new HttpClientFactory.<>c();

        internal HttpClient cctor>b__3_0()
        {
            HttpClient expr_0B = new HttpClient(StorageAuthenticationHttpHandler.Instance, false);
            expr_0B.get_DefaultRequestHeaders().set_ExpectContinue(new bool?(false));
            expr_0B.get_DefaultRequestHeaders().get_UserAgent().Add(new ProductInfoHeaderValue("Azure-Storage", "8.5.0"));
            expr_0B.get_DefaultRequestHeaders().get_UserAgent().Add(new ProductInfoHeaderValue(Constants.HeaderConstants.UserAgentComment));
            expr_0B.get_DefaultRequestHeaders().TryAddWithoutValidation("x-ms-version", "2017-04-17");
            expr_0B.set_Timeout(Timeout.InfiniteTimeSpan);
            return expr_0B;
        }
    }

    private static Lazy<HttpClient> instance = new Lazy<HttpClient>(new Func<HttpClient>(HttpClientFactory.<>c.<>9.<.cctor>b__3_0));

    public static HttpClient Instance
    {
        get
        {
            return HttpClientFactory.instance.get_Value();
        }
    }
}
}