Restsharp:底层联系已经关闭

时间:2017-04-14 14:34:46

标签: c# rest restsharp

我在Windows服务中使用RestSharp客户端时遇到问题。 当API关闭时,连接将丢失。但是一旦API再次运行,其余客户端就会继续抛出相同的错误。 即使我设置了RestClient的新实例。

任何有同样问题和工作解决方案或提案的人?

2 个答案:

答案 0 :(得分:2)

我是路德维希的同事。 我们的应用程序启动并连接到api, 应用程序继续运行并调用api。 当api突然关闭(重新启动)时,我们的应用程序出错:底层连接已关闭:服务器已关闭预期保持活动状态的连接,我们调用InitODataClient和ReadConfigAsync函数重新创建restClient。 当api再次运行时,我们希望RestClient再次工作,但我们不断得到:底层连接已关闭。无法为ssl / tls建立安全通道 当我们重新启动应用程序时,一切都会重 没有证书问题。 似乎创建一个新的RestClient对象使用旧的(无效)连接 我们使用的一些代码:

private RestClient restClient;

    private void InitODataClient()
    {
        restClient = new RestClient(options.BaseUrl);
        restClient.AddDefaultHeader("Authorization", "Bearer " + options.AccessToken);
    }

    private async Task ReadConfigAsync()
    {
            var requestApplication = new RestRequest("Applications/" + Guid.Parse(applicationId));
            var response = await restClient.ExecuteGetTaskAsync<Application>(requestApplication);
//Here the response contains the underlying connection is closed error
    }

    public async Task RestartAsync()
    {
        Stop();
        do
        {
            try
            {
                Logger.Log("Trying to reconnect to the server in 5 seconds...");
                Thread.Sleep(5000);
                InitODataClient();
                ReadConfigAsync().Wait();
                break;
            }
            catch (Exception) { }
        }
        while (true);
    }

答案 1 :(得分:1)

基本上,这似乎是SSL / TLS协商失败。为了确保这一点,在实例化RestClient之前,可以按照以下示例设置ServicePointManager.SecurityProtocol:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
restClient = new RestClient(options.BaseUrl);

希望这对某人有帮助。