3

我必須更改舊版Google Analytics API後面的身份驗證系統認證系統正在失效。作爲SO後的結果是,我的身份驗證文件就來自:Google API更改導致MONO錯誤:System.Net.Http.HttpClientHandler:.ctor()中的IL代碼無效:方法正文爲空

protected override void Load(ContainerBuilder builder) 
{ 
    builder.Register(c => 
    { 
     var service = new AnalyticsService("mrfreeman.com"); 
     service.setUserCredentials("[email protected]", "jellyfish"); 
     return service; 
    }); 

    builder.RegisterType<AnalyticsNewsletterTrackingSource>().As<INewsletterTrackingSource>(); 
    builder.RegisterType<AnalyticsSearchTrackingSource>().As<ISearchTrackingSource>(); 

    builder.RegisterType<AnalyticsEmailLinkTracker>().As<IEmailLinkTracker>(); 
} 

要:

private const string ServiceAccountEmail = "[email protected]"; 

private static readonly string KeyPath = System.IO.Path.Combine(AppDomain.CurrentDomain.SetupInformation.PrivateBinPath ?? AppDomain.CurrentDomain.BaseDirectory, "Key.p12"); 

private static readonly X509Certificate2 Certificate = new X509Certificate2(KeyPath, "notasecret", X509KeyStorageFlags.Exportable); 
private readonly ServiceAccountCredential _credential = new ServiceAccountCredential(
     new ServiceAccountCredential.Initializer(ServiceAccountEmail) 
     { 
      Scopes = new[] { "https://www.googleapis.com/auth/analytics" } 
     }.FromCertificate(Certificate)); 

protected override void Load(ContainerBuilder builder) 
{ 
    builder.Register(c => 
    { 
     _credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Wait(); 
     var service = new AnalyticsService("mrfreeman.com"); 

     var requestFactory = new GDataRequestFactory("shazbot2.0"); 
     requestFactory.CustomHeaders.Add(string.Format("Authorization: Bearer {0}", _credential.Token.AccessToken)); 
     service.RequestFactory = requestFactory; 

     return service; 
    }); 

    builder.RegisterType<AnalyticsNewsletterTrackingSource>().As<INewsletterTrackingSource>(); 
    builder.RegisterType<AnalyticsSearchTrackingSource>().As<ISearchTrackingSource>(); 

    builder.RegisterType<AnalyticsEmailLinkTracker>().As<IEmailLinkTracker>(); 
} 

做所有複製生成的開發者的電子郵件地址和P12重點轉化項目所需的鍋爐板。

問題是這樣的:它可以在Windows上運行,但是會在mono上運行的服務引發問題,並且依賴於Analytics模塊。目前使用4.0.2版本的Mono。

我已經試過什麼:

  • 使用單聲道的新舊版本 - 3.10和4.2.0預發佈中運行的服務(其本身是由Visual Studio內置),並檢查是否異常是產生的。
  • 導入System.Net.Http並複製到本地(目前不在服務引用) - 仍然會產生相同的異常

在這個階段,我走投無路到學習新的谷歌Analytics(分析)API和重寫一切從頭開始,因爲我試圖使用舊的API,但用一點運氣更新Auth API,但感覺這是一個鈍器型解決方案。

堆棧跟蹤是任何版本相同的是:

FATAL Unhandled exception occurred. 
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidProgramException: Invalid IL code in System.Net.Http.HttpClientHandler:.ctor(): method body is empty. 

    at Google.Apis.Http.HttpClientFactory.CreateHandler (Google.Apis.Http.CreateHttpClientArgs args) <0x40280100 + 0x0003b> in <filename unknown>:0 
    at Google.Apis.Http.HttpClientFactory.CreateHttpClient (Google.Apis.Http.CreateHttpClientArgs args) <0x4027ff90 + 0x0002d> in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceAccountCredential..ctor (Google.Apis.Auth.OAuth2.Initializer initializer) <0x4027f6d0 + 0x00438> in <filename unknown>:0 
    at jellyfish.Analytics.AnalyticsModule..ctor() <0x4027ed00 + 0x00103> in <filename unknown>:0 
    at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&) 
    at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) <0x7f8257b94780 + 0x0003f> in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) <0x7f8257b94780 + 0x00079> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceMono (Boolean nonPublic) <0x7f82579c1ec0 + 0x00116> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, System.Threading.StackCrawlMark& stackMark) <0x7f82579c1e70 + 0x00049> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, System.Threading.StackCrawlMark& stackMark) <0x7f82579c1c10 + 0x0005c> in <filename unknown>:0 
    at System.Activator.CreateInstance[T]() <0x7f82578dfb70 + 0x0008a> in <filename unknown>:0 
    at Autofac.ModuleRegistrationExtensions.RegisterModule[TModule] (IModuleRegistrar registrar) <0x40273470 + 0x0004f> in <filename unknown>:0 
    at Autofac.ModuleRegistrationExtensions.RegisterModule[TModule] (Autofac.ContainerBuilder builder) <0x40273330 + 0x0006b> in <filename unknown>:0 
    at jellyfish.Cron.Program.BuildContainer (ILog log) <0x402730e0 + 0x0005f> in <filename unknown>:0 
    at jellyfish.Cron.Program.ExecuteJob (System.Type jobType) <0x4021abe0 + 0x0007b> in <filename unknown>:0 
Unknown errno: Protocol error 


Unhandled Exception: 
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidProgramException: Invalid IL code in System.Net.Http.HttpClientHandler:.ctor(): method body is empty. 

    at Google.Apis.Http.HttpClientFactory.CreateHandler (Google.Apis.Http.CreateHttpClientArgs args) <0x40280100 + 0x0003b> in <filename unknown>:0 
    at Google.Apis.Http.HttpClientFactory.CreateHttpClient (Google.Apis.Http.CreateHttpClientArgs args) <0x4027ff90 + 0x0002d> in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceAccountCredential..ctor (Google.Apis.Auth.OAuth2.Initializer initializer) <0x4027f6d0 + 0x00438> in <filename unknown>:0 
    at jellyfish.Analytics.AnalyticsModule..ctor() <0x4027ed00 + 0x00103> in <filename unknown>:0 
    at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&) 
    at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) <0x7f8257b94780 + 0x0003f> in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) <0x7f8257b94780 + 0x00079> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceMono (Boolean nonPublic) <0x7f82579c1ec0 + 0x00116> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, System.Threading.StackCrawlMark& stackMark) <0x7f82579c1e70 + 0x00049> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, System.Threading.StackCrawlMark& stackMark) <0x7f82579c1c10 + 0x0005c> in <filename unknown>:0 
    at System.Activator.CreateInstance[T]() <0x7f82578dfb70 + 0x0008a> in <filename unknown>:0 
    at Autofac.ModuleRegistrationExtensions.RegisterModule[TModule] (IModuleRegistrar registrar) <0x40273470 + 0x0004f> in <filename unknown>:0 
    at Autofac.ModuleRegistrationExtensions.RegisterModule[TModule] (Autofac.ContainerBuilder builder) <0x40273330 + 0x0006b> in <filename unknown>:0 
    at jellyfish.Cron.Program.BuildContainer (ILog log) <0x402730e0 + 0x0005f> in <filename unknown>:0 
    at jellyfish.Cron.Program.ExecuteJob (System.Type jobType) <0x4021abe0 + 0x0007b> in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidProgramException: Invalid IL code in System.Net.Http.HttpClientHandler:.ctor(): method body is empty. 

    at Google.Apis.Http.HttpClientFactory.CreateHandler (Google.Apis.Http.CreateHttpClientArgs args) <0x40280100 + 0x0003b> in <filename unknown>:0 
    at Google.Apis.Http.HttpClientFactory.CreateHttpClient (Google.Apis.Http.CreateHttpClientArgs args) <0x4027ff90 + 0x0002d> in <filename unknown>:0 
    at Google.Apis.Auth.OAuth2.ServiceAccountCredential..ctor (Google.Apis.Auth.OAuth2.Initializer initializer) <0x4027f6d0 + 0x00438> in <filename unknown>:0 
    at jellyfish.Analytics.AnalyticsModule..ctor() <0x4027ed00 + 0x00103> in <filename unknown>:0 
    at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&) 
    at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) <0x7f8257b94780 + 0x0003f> in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) <0x7f8257b94780 + 0x00079> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceMono (Boolean nonPublic) <0x7f82579c1ec0 + 0x00116> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, System.Threading.StackCrawlMark& stackMark) <0x7f82579c1e70 + 0x00049> in <filename unknown>:0 
    at System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, System.Threading.StackCrawlMark& stackMark) <0x7f82579c1c10 + 0x0005c> in <filename unknown>:0 
    at System.Activator.CreateInstance[T]() <0x7f82578dfb70 + 0x0008a> in <filename unknown>:0 
    at Autofac.ModuleRegistrationExtensions.RegisterModule[TModule] (IModuleRegistrar registrar) <0x40273470 + 0x0004f> in <filename unknown>:0 
    at Autofac.ModuleRegistrationExtensions.RegisterModule[TModule] (Autofac.ContainerBuilder builder) <0x40273330 + 0x0006b> in <filename unknown>:0 
    at jellyfish.Cron.Program.BuildContainer (ILog log) <0x402730e0 + 0x0005f> in <filename unknown>:0 
    at jellyfish.Cron.Program.ExecuteJob (System.Type jobType) <0x4021abe0 + 0x0007b> in <filename unknown>:0 

回答

0

我有類似的問題,所以想嘗試刪除和添加下列DLL來修復它。

刪除了System.net.http,OkHttp,ModernClient。發現問題是在引用下添加了ModernClientHttp和OkHttp dlls。

我已經刪除了OkHttp和ModernClientHttp,並通過Nuget添加了ModernClientHttp並且適用於我。 如果有幫助,請嘗試一下。

相關問題