Использование System.Net.Http.SocketsHttpHandler в .NET Core 2.1.0-rc1-final - PullRequest
0 голосов
/ 22 мая 2018

.NET Core 2.1 поставляется с большим улучшением на System.Net.HttpClient

Для HttpClient мы создали новый управляемый с нуля HttpClientHandler под названием SocketHttpHandler .Как вы, вероятно, догадываетесь, это реализация HttpClient на C #, основанная на сокетах .NET и Span.

Мое приложение - это приложение ASP.NET Core, размещенное как служба Windows, согласно Microsoft этот документ, проект основан на .NET Core, но его TargetFramework является .NET framework.

Приложение хорошо работает с .NET Core 2.0, ориентированным на .NETframework 4.7.1.

Недавно Microsoft выпустила Microsoft.AspNetCore 2.1.0-rc1-final, который готов к использованию.Поэтому я попытался обновить до этой версии.

, поэтому я обновил TargetFramework до 4.7.2 и обновил ссылку, как показано ниже.

<PackageReference Include="Microsoft.AspNetCore" Version="2.1.0-rc1-final" /> <PackageReference Include="Microsoft.AspNetCore.Hosting.WindowsServices" Version="2.1.0-rc1-final" /> <PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.1.0-rc1-final" /> <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.1.0-rc1-final" /> <PackageReference Include="Microsoft.AspNetCore.Http" Version="2.1.0-rc1-final" /> <PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="2.1.0-rc1-final" />

Затем он останавливаетсяработает и компилятор выдает ошибку типа Не удалось найти тип или имя пространства имен 'HttpClient'

Мне известно о HttpClient, существующем в NuGet System.Net.Http сборке.

Однако его последняя версия - 4.3.3 от 8 месяцев назад, которая, как мне кажется, не содержит реализацию SocketHttpHandler .

Так что мой вопрос:Как я могу использовать последнюю версию HttpClient из .NET Core 2.1 для .NET Framework 4.7.2?

1 Ответ

0 голосов
/ 23 мая 2018

.NET Core отличается от ASP.NET Core..NET Core - базовая среда выполнения.ASP.NET Core - это среда, которая может работать поверх .NET Core или полной среды выполнения .NET Framework.Как вы упомянули, ваше приложение предназначено для полной версии 4.7.1 платформы, а не .NET Core 2.0 или 2.1

. Новый HttpClient и SocketsHttpHandler являются частью .NET Core 2.1..Они включены в сборку System.NET.Http.Вы можете использовать их в любом приложении, предназначенном для этой среды выполнения, даже в настольных приложениях.Я уже делаю это без каких-либо ссылок на сборки или пакеты ASP.NET Core.Все, что я добавил, было ссылкой на System.Net.Http.

My csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="System.Net.Http">
      <HintPath>C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.1.0-rc1\ref\netcoreapp2.1\System.Net.Http.dll</HintPath>
    </Reference>
  </ItemGroup>

</Project>

и пример вызова:

using System;
using System.Net.Http;
using System.Net;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var handler = new SocketsHttpHandler
        {
            MaxConnectionsPerServer=100,
            AutomaticDecompression=DecompressionMethods.GZip|DecompressionMethods.Deflate
        };
        var client = new HttpClient(handler);
        var result = await client.GetStringAsync(someUrl);
        Console.WriteLine("Hello World!");
    }
}

Ваш проект будет иметьнацеливаться на эту конкретную среду выполнения, даже на 2.0, если вы хотите их использовать.Вам также необходимо установить .NET Core 2.1 RC 1 SDK , чтобы создавать и создавать проекты, ориентированные на .NET Core 2.1.Вам также нужно будет установить новую среду выполнения на производственных серверах.

После этого вы можете создать проект .NET Core из командной строки с dotnet new и именем шаблона, например:

dotnet new razor
dotnet new mvc
dotnet new angular

Или через Visual Studio, из категории Visual C# > .NET Core и выбора шаблона ASP.NET Core Web Application.

Вы также можете создать его из шаблона Web > ASP.NET Core Web Application, если выберете .NET Core как среда выполнения и ASP.NET Core 2.1 как цель.

Этот класс доступен только для , если вы нацелены на .NET Core 2.1 .Если я изменю цель на netcoreapp2.0, компилятор будет жаловаться на то, что SocketsHttpHandler не существует.

В настоящее время нет документации по SocketsHttpHandler, за исключением пары постов в блоге и самого исходного кода

...