Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net RestSharp Response通常只允许对每个套接字地址(协议/网络地址/端口)使用一次_.net_Sockets_Core_Restsharp - Fatal编程技术网

.net RestSharp Response通常只允许对每个套接字地址(协议/网络地址/端口)使用一次

.net RestSharp Response通常只允许对每个套接字地址(协议/网络地址/端口)使用一次,.net,sockets,core,restsharp,.net,Sockets,Core,Restsharp,我正在使用RestSharp与.Net核心Web API进行通信。客户端和服务器都是我写的 我有一套服务,所有这些服务都继承了一个基类,该基类包含一个通过RestClient执行请求的异步方法。下面是创建RestClient的基类中的方法 private async Task<ServiceResponse> RequestAsync(ServiceRequest request) { try { var res

我正在使用RestSharp与.Net核心Web API进行通信。客户端和服务器都是我写的

我有一套服务,所有这些服务都继承了一个基类,该基类包含一个通过RestClient执行请求的异步方法。下面是创建RestClient的基类中的方法

    private async Task<ServiceResponse> RequestAsync(ServiceRequest request)
    {
        try
        {
            var result = await new RestClient(_digiCore.Config.GetApiBaseUrl()).ExecuteTaskAsync(request.Request, request.CancellationTokenSource.Token);

            switch (result.StatusCode)
            {
                case HttpStatusCode.OK:
                case HttpStatusCode.Created:
                case HttpStatusCode.NoContent:
                    return new ServiceResponse
                    {
                        Code = ServiceResponseCode.Success,
                        Content = result.Content
                    };
                // User wasn't authenticated for this one - better luck next time!
                case HttpStatusCode.Unauthorized:
                    Logger.LogError($"Unauthorized {request.Method.ToString()}/{request.Path}");
                default:
                    Logger.LogError($"An error occurred {request.Method.ToString()}/{request.Path}");
            }
        }
        catch (Exception e)
        {
            Logger.LogError($"A Rest Client error occurred {request.Method.ToString()}/{request.Path}");
        }
    }
我相信这是由于疲劳所致。API和客户端都作为应用程序服务在Azure中运行

我尝试将RestClient作为单例服务的一部分,并检查它是否只创建了一次,但这并没有缓解问题

我还研究了在我的启动类的启动函数中将DefaultConnectionLimit从默认值(2)设置为12,但是我也没有看到任何改进


我真的很努力想看看我能如何改进这个。。。任何帮助都将不胜感激

找出原因

RestSharp目前似乎存在一个问题,即套接字连接不会立即关闭,而是保持在等待状态

此问题目前已记录在RestSharp网站上->

我已经选择切换到使用HttpClient,并且运行完全相同的负载测试,我没有任何问题

下面是从Azure截图,显示了两个负载测试之间的差异

  • 我的应用程序使用了RestSharp
  • 我的应用程序使用Http客户端
  • 希望这对别人有帮助。遗憾的是,我不得不抛弃RestSharp,因为它是一个很好的小库——不幸的是,对于这样的问题,在生产环境中运行它太冒险了

    Only one usage of each socket address (protocol/network address/port) is normally permitted