【发布时间】:2018-10-09 20:23:28
【问题描述】:
我正在尝试重新设计我的 Azure API 客户端以将单例 HttpClient 用于 ServiceClient<T>,因为有多个来源建议这样做(为了提高性能,并且还建议使用 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,布尔值)
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 客户端单例的方式
public static class HttpClientSingleton
{
public static readonly HttpClient Client = new HttpClient() { Timeout = TimeSpan.FromMinutes(30) };
}
为什么会出现这个异常(我可以看到ServiceClient有ctor(httpClient, bool))?
如何解决这个问题?
【问题讨论】:
-
HttpClient的版本? -
尝试恢复 nuget 包
-
@MatrixTai 组装 System.Net.Http,版本=4.0.0.0 ...NETFramework\v4.5.2\System.Net.Http.dll
-
也许你应该尝试更新一个新版本,或者改变绑定程序集,看这个github.com/Azure/autorest/issues/2857#issuecomment-422520170
标签: c# azure httpclient