【问题标题】:Consuming ASMX service in .Net Core API: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types在 .Net Core API 中使用 ASMX 服务:System.Reflection.ReflectionTypeLoadException:无法加载一种或多种请求的类型
【发布时间】:2019-03-07 09:55:09
【问题描述】:

尝试启动部署在 IIS 上的 .Net Core API 应用程序时,我在日志文件中遇到以下错误。根据许多帖子(IIS 中的配置更改等)尝试了许多解决方法,但仍然无法解决此问题。特意尝试添加日志查找具体缺失的dll使用此链接,与.Net Core相关ReflectionTypeLoadException in ASP.NET Core MVC application

  • 创建了一个 ExceptionCatchMiddleware 扩展类。
  • 在 Startup.cs 的 Configure() 方法中添加:

但它没有记录任何与此异常相关的特定日志消息。日志中只有上面提到的错误。

这是一个 .Net Core API 应用程序(带有 Visual Studio 2017 的 Net Core 2.0)。在 Windows 10 和 Windows Server 2012 R2 的 IIS 上部署。日志文件中也有同样的错误。

我在这里发现的主要问题是:这个项目添加了对 SOAP 服务(asmx 服务)的引用。删除此服务引用时,不会出现此类错误。似乎应用程序正在尝试从其他地方获取相关的 dll,而不是从已发布的文件夹中获取。可能来自 GAC。但也将与“system.servicemodel.*”相关的 dll 复制到 GAC(这些是通过 Visual Studio 中的连接服务添加该服务引用时自动添加的 dll(来自 Nuget)。

这仅在部署后发生(在 IIS 上)。从源代码运行此应用程序时,这工作正常。没有这样的错误。我不确定这些新版本的 .Net Core 部署后是否不支持 asmx 服务。

感谢任何帮助解决此问题,因为我们需要此项目中的 asmx 服务参考。 谢谢。

2018-10-01T10:10:42.6383743+01:00 0HLH7FMNJ4U50:00000002 [ERR] 连接 ID ""0HLH7FMNJ4U50"",请求 ID ""0HLH7FMNJ4U50:00000002"":应用程序引发了未处理的异常。 (560e7d32) System.Reflection.ReflectionTypeLoadException:无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。 在 System.Reflection.RuntimeModule.GetTypes(RuntimeModule 模块) 在 System.Reflection.RuntimeAssembly.get_DefinedTypes() 在 Microsoft.AspNetCore.Mvc.Controllers.ControllerFeatureProvider.PopulateFeature(IEnumerable1 部分​​,ControllerFeature 功能) 在 Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateFeature[TFeature](TFeature 功能) 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider.GetControllerTypes () 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider.BuildModel() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider.GetDescriptors() 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider.OnProvidersExecuting(ActionDescriptorProviderContext context) 在 Microsoft.AspNetCore .Mvc.Internal.ActionDescriptorCollectionProvider.UpdateCollection() 在 Microsoft.AspNetCore.Mvc.Internal.ActionDescriptorCollectionProvider.get_ActionDescriptors() 在 Microsoft.AspNetCore.Mvc.Internal.AttributeRoute.GetTreeRouter() 在 Microsoft.AspNetCore.Mvc.Internal.AttributeRoute.RouteAsync (RouteContext 上下文)在 Microsoft.AspNe tCore.Routing.RouteCollection.d__9.MoveNext() --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 处从先前引发异常的位置结束堆栈跟踪(任务任务)在 Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System. Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware.d__11.MoveNext() 处的 Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- 在 System.Runtime.ExceptionServices 处从先前引发异常的位置结束堆栈跟踪.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.d__3.MoveNext () --- 从先前引发异常的位置结束堆栈跟踪 --- 在 Microsoft.AspNetCore 的 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()。 Server.Kestrel.Core.Internal.Http.Frame1.d__2.MoveNext() 2018-10-01T10:10:42.6385488+01:00 0HLH7FMNJ4U50:00000002 [INF] 请求在 11.3774 毫秒 500 (791a596a) 内完成

PS:我可以解决这个问题。我在下面的评论中添加了我找到的解决方案。

【问题讨论】:

  • 检查依赖项是否在 Startup.cs 的services 中正确注入
  • 此 ExceptionCatchMiddleware 不是服务扩展。所以没有在 ConfigureServices() 中添加任何东西。此行添加在 Startup.cs 的 Configure() 方法中:app.UseMiddleware<ExceptionCatchMiddleware>();,如上面的链接所述。
  • @t-prisar,请告诉我是否可以注入 ConfigureServices()。谢谢。
  • 或者你的意思是,任何与 asmx 服务/引用相关的依赖项?
  • 对不起,我不知道。我想你可以在你的代码中尝试类似的东西。

标签: c# web-services iis .net-core asmx


【解决方案1】:

我可以通过在 .Net Core 2.0 项目中包含一个 .Net 标准项目来解决此问题(将 .Net 标准项目引用添加到 .Net Core 项目)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多