背景:我已在Google Developer Console上为我的项目设置了服务帐户,并使用服务帐户电子邮件,证书和密码,并按照GoogleAPisSample Plus.ServiceAccount中提供的示例提供.下面的代码片段是我的Windows服务应用程序的一部分:
var List<string> Scopes = new List<string> { "https://www.googleapis.com/auth/analytics.readonly" };
var credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(ServiceAccountEmail)
{
Scopes = Scopes
}.FromCertificate(certificate));
if(credential.RequestAccessTokenAsync(CancellationToken.None).Result)
{
AuthenticationKey = credential.Token.AccessToken;
}
Run Code Online (Sandbox Code Playgroud)
当我在我的本地开发机器上安装并运行此服务时,它会完成credential.RequestAccessTokenAsync并接收AccessToken并继续执行该服务并正确读取Analytics数据.
但是,当它部署在我们的QA环境(Window Server 2008 R2 Standard)上并再次运行时,在调用credential.RequestAccessTokenAsync时会抛出以下异常:
System.AggregateException: One or more errors occurred. ---> System.MissingMethodException: Method not found: 'System.Net.HttpStatusCode System.Net.Http.HttpResponseMessage.get_StatusCode()'.
at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
at OurApplication.SchedulerService.GoogleAnalytics.OAuth2.ServiceAccountCredential.<RequestAccessTokenAsync>d__b.MoveNext()
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task`1.get_Result()
at OurApplication.SchedulerService.GoogleAnalytics.GADataFetcher.AuthenticateAndAuthorize()
at OurApplication.SchedulerService.GoogleAnalytics.GADataFetcher..ctor()
at OurApplication.SchedulerService.GoogleAnalytics.GoogleAnalyticsService.GoogleAnalyticsTopPerformances(Int32 sessID, String sessToken)
---> (Inner Exception …Run Code Online (Sandbox Code Playgroud)