【问题标题】:ASP.NET MVC and IIS - Sequence contains no matching elementASP.NET MVC 和 IIS - 序列不包含匹配元素
【发布时间】:2013-03-21 16:33:39
【问题描述】:

我有一个用 ASP.NET MVC 编写的 Web 应用程序。一切都很好,在 Visual Studio 应用程序中工作得很好,但是一旦我把它放在 IIS 服务器上,它就会给我这个错误: Sequence contains no matching element.

这是它给我的堆栈跟踪:

[InvalidOperationException:序列不包含匹配元素]
System.Linq.Enumerable.Single(IEnumerable1 source, Func2 谓词) +4134530 XSockets.Plugin.Framework.Helpers.PluginHelpers.GetInstance(ImportedType importType) +143 XSockets.Plugin.Framework.Composable.Compose(T obj) +656 XSocketsServer..ctor() +170
Scyk.MvcApplication.Application_Start() +173

[HttpException (0x80004005): 序列不包含匹配元素]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext 上下文,HttpApplication 应用程序)+12864673
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext、HttpContext 上下文、MethodInfo[] 处理程序)+175
System.Web.HttpApplication.InitSpecial(HttpApplicationState 状态, MethodInfo[] 处理程序、IntPtr appContext、HttpContext 上下文)+304
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext、HttpContext 上下文)+404
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): 序列不包含匹配元素]
System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文) +12881540 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +159 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+12722601

有人可以帮我吗?我不知道出了什么问题,尤其是在 Visual Studio 中一切正常时...

编辑:我的 App_Start():

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    new XSocketsServer();
}

我正在那里启动 xsockets 服务器,但无论如何,如果我注释掉这个 XSocketsServer,它仍然会给我同样的错误。

【问题讨论】:

  • 至少您需要发布您的Scyk.MvcApplication.Application_Start()... 但基于异常我猜服务器上缺少一些 dll。确保Bin 目录在服务器上和本地包含相同的文件。你还应该检查XSockets使用的插件
  • @nemesv:我认为没有任何遗漏,因为我在 Visual Studio 上发布了所有内容,因此它应该已经包含所有内容。
  • 您使用的是什么版本的 XSockets?猜2.3?
  • @Uffe:是的,我刚刚给你写了一封邮件。 :)
  • 我必须使用与 nemesv 相同的提示。您可能缺少一些程序集,但如果您使用参考选项,还要检查您是否不使用插件目录。因此,如果您在 bin 中拥有所有 XSocketsPlugins,则为 plugincatalog = "" 设置配置

标签: asp.net asp.net-mvc iis xsockets.net


【解决方案1】:

我设法重现了错误。如果您在启动调试器之前没有选择“重建解决方案”,这似乎会发生。我无法回答您是如何在带有预编译程序集的 IIS 上遇到错误的...

但是,下面的解决方法应该可以工作(刚刚快速测试过)。

  1. Install-Package WebActivator -Version 1.5.3
  2. 在 App_Start 运行后使用 PostApplicationStartMethod 启动服务器。

    [assembly: WebActivator.PostApplicationStartMethod(typeof(MyApplication.App_Start.XSocketsStart), "Start")]
    

还有班级……

namespace MyApplication.App_Start
{
    public static class XSocketsStart
    {
        public static void Start()
        {
            //Start the server.... In this case named Instance.
            new Instance();
        }
    }
}

编辑:在公共网站上添加了一条注释:WorkAround

问候 乌菲

【讨论】:

    【解决方案2】:

    应用程序池是否处于集成模式?

    【讨论】:

    • 那是什么?为什么这很重要?
    • 它是IIS中的两种管道模式(处理模式)之一(另一种是经典的,这是之前的IIS7),ASP.NET MVC需要一个集成管道模式的apppool。在堆栈跟踪中: EnsureAppStartCalledForIntegratedMode
    【解决方案3】:

    检查您是在 32 位还是 64 位进行调试,以及服务器的设置方式。如果服务器运行 64 位,您可能必须启用 32 位应用程序才能“访问”您的第三方 dll。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      相关资源
      最近更新 更多