Использование singleton HttpClient с Microsoft.Rest.ServiceClient – получение System.MissingMethodException

Я пытаюсь переработать свой клиент API Azure, чтобы использовать singleton HttpClient для ServiceClient , поскольку для этого предлагалось использовать несколько источников (для производительности, а также предлагается подход для HttpClient который используется за кулисами для Microsoft.Rest.ServiceClient “в общем”)

Я использую версию Microsoft.Rest.ClientRuntime.2.3.12

Я вижу, что Microsoft.Rest.ServiceClient имеет конструктор для повторного использования HttpClient

 protected ServiceClient(HttpClient httpClient, bool disposeHttpClient = true); 

Это конструктор для моего клиента API, чтобы повторно использовать HttpClient, но когда он вызывается, он терпит неудачу с System.MissingMethodException : Void Microsoft.Rest.ServiceClient`1..ctor (System.Net.Http.HttpClient, Boolean)

 public MyAPIclient(ServiceClientCredentials credentials, HttpClient client) : base(client, disposeHttpClient: false) { this._baseUri = new Uri("https://..."); if (credentials == null) { throw new ArgumentNullException("credentials"); } this.Credentials = credentials; Credentials?.InitializeServiceClient(this); } 

Так я называю API-клиент

 using (var apiClient = new MyAPIclient(credentials, HttpClientSingleton.Client)) //I get Method not found 'Void Microsoft.Rest.ServiceClient`1..ctor(System.Net.Http.HttpClient, Boolean)' { //some api call } 

Вот как я создаю экземпляр моего клиента http oneton

 public static class HttpClientSingleton { public static readonly HttpClient Client = new HttpClient() { Timeout = TimeSpan.FromMinutes(30) }; } 

Почему я получаю это исключение (я вижу, что ServiceClient имеет ctor(httpClient, bool) )?

Как решить эту проблему?

Как сказал Nkosi, вы должны попробовать восстановить пакеты nuget, очистить свой obj / bin и перестроить. Обычно это происходит, когда ситуация выходит из строя. Со всем теневым кэшированием и т. Д. Все может закончиться несоответствием. Я создал небольшой пример, основанный на вашем коде, и никаких проблем с ним не возникало. Если вы обнаружите, что все еще не работает, вы должны включить больше информации о своем файле, например объявления classов и ваши операторы использования, а также какую версию .net вы используете.

Нижеследующее работает для меня для 4.5.2 ServiceClient 2.3.12

 using Microsoft.Rest; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { class Program { static void Main(string[] args) { using (var apiClient = new MyAPIclient(null, HttpClientSingleton.Client)) //I get Method not found 'Void Microsoft.Rest.ServiceClient`1..ctor(System.Net.Http.HttpClient, Boolean)' { var httpClient = apiClient.HttpClient; } } public class MyAPIclient : ServiceClient { protected Uri _baseUri { get; set; } protected ServiceClientCredentials Credentials { get; set; } public MyAPIclient(ServiceClientCredentials credentials, HttpClient client) : base(client, disposeHttpClient: false) { this._baseUri = new Uri("https://stackoverflow.com"); this.Credentials = credentials; if(credentials != null) Credentials?.InitializeServiceClient(this); } } public static class HttpClientSingleton { public static readonly HttpClient Client = new HttpClient() { Timeout = TimeSpan.FromMinutes(30) }; } } }