【问题标题】:WcfFacility Sequence contains no elementsWcfFacility 序列不包含任何元素
【发布时间】:2011-11-21 16:43:29
【问题描述】:

在尝试安装我的 wcf 服务时,我不断收到 Sequence contains no elements 错误。

这是我 global.asax 中的代码:

_container = new WindsorContainer();

_container.Register(Component.For<IWindsorContainer>().Instance(_container))
          .AddFacility<WcfFacility>()
          .Install(Configuration.FromAppConfig())
          .Install(FromAssembly.InDirectory(new AssemblyFilter(HttpRuntime.BinDirectory, "Web*.dll")));

这是我在 web.config 中的 system.servicemodel 部分:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
  <client>
    <endpoint address="http://commandservice.website.com/WebsiteCommandService.svc" binding="basicHttpBinding" contract="CommandService.IWebsiteCommandService" name="commandServiceClient"></endpoint>
  </client>
</system.serviceModel>

这是我的城堡配置(在 web.config 中):

<castle>
    <components>
      <component
          id="commandService"
          type="CommandService.WebsiteCommandService, CommandService"
          wcfEndpointConfiguration="commandServiceClient" />
    </components>
</castle>

我是否遗漏了一些明显的东西?

更新:

这是堆栈跟踪:

[InvalidOperationException: Sequence contains no elements]
   System.Linq.Enumerable.Single(IEnumerable`1 source) +371
   Castle.Facilities.WcfIntegration.WcfClientExtension.ObtainServiceContract(ComponentModel model, IWcfClientModel clientModel) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:239
   Castle.Facilities.WcfIntegration.WcfClientExtension.ResolveClientModel(ComponentModel model) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:234
   Castle.Facilities.WcfIntegration.WcfClientExtension.Kernel_ComponentModelCreated(ComponentModel model) in c:\TeamCity\buildAgent\work\a19756d977ce9d2c\src\Castle.Facilities.WcfIntegration\Client\WcfClientExtension.cs:189
   Castle.MicroKernel.ComponentModelDelegate.Invoke(ComponentModel model) +0
   Castle.MicroKernel.DefaultKernel.AddCustomComponent(ComponentModel model, Boolean isMetaHandler) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:281
   Castle.MicroKernel.DefaultKernel.Register(IRegistration[] registrations) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:536
   Castle.Windsor.WindsorContainer.Register(IRegistration[] registrations) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\Windsor\WindsorContainer.cs:482
   Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] configurations, IWindsorContainer container, IConversionManager converter) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\Windsor\Installer\DefaultComponentInstaller.cs:211
   Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers, DefaultComponentInstaller scope) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\Windsor\WindsorContainer.cs:317
   Castle.Windsor.WindsorContainer.Install(IWindsorInstaller[] installers) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\Windsor\WindsorContainer.cs:453
   Website.MvcApplication.ConfigureContainer() in C:\Users\Wayne Douglas\Dev\ProjectWebsite\Website\Global.asax.cs:65
   Website.MvcApplication.Application_Start() in C:\Users\Wayne Douglas\Dev\ProjectWebsite\Website\Global.asax.cs:53

[HttpException (0x80004005): Sequence contains no elements]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +4052053
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +352
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375

[HttpException (0x80004005): Sequence contains no elements]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11686928
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4863749

更新

现在问题似乎出在其他地方 - 就像它正在尝试解析组件,就好像它是一个普通对象而不是 wcf 服务一样。牢记服务有效 - 尝试使用 wcf 解决它时,我在 ctor 上收到错误:

    public WebSiteCommandService(ICommandService service)
    {
        _service = service;
    }

它说没有 ICommandService 的组件

为什么客户端容器试图解决这个问题?

好像 wcffacility 的东西被完全跳过了?

这是堆栈:

[InstanceNotFoundInEnvironmentConfigurationException: Could not find requested type Ncqrs.Commanding.ServiceModel.ICommandService in the NcqrsEnvironment configuration. Make sure that the NcqrsEnvironment is configured correctly or that defaults are correctly set.]
   Ncqrs.NcqrsEnvironment.Get() in C:\Users\Wayne Douglas\Dev\ProjectWebsite\ThirdParty\NCQRS\src\Ncqrs\NcqrsEnvironment.cs:96
   CommandService.WebsiteCommandService..cctor() in C:\Users\Wayne Douglas\Dev\ProjectWebsite\CommandService\WebsiteCommandService.svc.cs:17

[TypeInitializationException: The type initializer for 'CommandService.WebsiteCommandService' threw an exception.]
   System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject(RuntimeType type) +0
   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstanceCore(ConstructorCandidate constructor, Object[] arguments, Type implType) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:151

[ComponentActivatorException: ComponentActivator: could not instantiate CommandService.WebsiteCommandService]
   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstanceCore(ConstructorCandidate constructor, Object[] arguments, Type implType) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:163
   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateInstance(CreationContext context, ConstructorCandidate constructor, Object[] arguments) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:116
   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCreate(CreationContext context) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:66
   Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext context, Burden burden) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\AbstractComponentActivator.cs:80
   Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.CreateInstance(CreationContext context, Boolean trackedExternally) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Lifestyle\AbstractLifestyleManager.cs:81
   Castle.MicroKernel.Lifestyle.SingletonLifestyleManager.Resolve(CreationContext context, IReleasePolicy releasePolicy) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Lifestyle\SingletonLifestyleManager.cs:63
   Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext context, Boolean requiresDecommission, Boolean instanceRequired, Burden& burden) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Handlers\DefaultHandler.cs:124
   Castle.MicroKernel.Handlers.DefaultHandler.Resolve(CreationContext context, Boolean instanceRequired) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Handlers\DefaultHandler.cs:98
   Castle.MicroKernel.Resolvers.DefaultDependencyResolver.ResolveCore(CreationContext context, ComponentModel model, DependencyModel dependency) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:308
   Castle.MicroKernel.Resolvers.DefaultDependencyResolver.Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Resolvers\DefaultDependencyResolver.cs:158
   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.CreateConstructorArguments(ConstructorCandidate constructor, CreationContext context) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:292
   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.Instantiate(CreationContext context) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:85
   Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalCreate(CreationContext context) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\DefaultComponentActivator.cs:66
   Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Create(CreationContext context, Burden burden) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\ComponentActivator\AbstractComponentActivator.cs:80
   Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.CreateInstance(CreationContext context, Boolean trackedExternally) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Lifestyle\AbstractLifestyleManager.cs:81
   Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Resolve(CreationContext context, IReleasePolicy releasePolicy) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Lifestyle\AbstractLifestyleManager.cs:70
   Castle.MicroKernel.Handlers.DefaultHandler.ResolveCore(CreationContext context, Boolean requiresDecommission, Boolean instanceRequired, Burden& burden) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Handlers\DefaultHandler.cs:124
   Castle.MicroKernel.Handlers.DefaultHandler.Resolve(CreationContext context, Boolean instanceRequired) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\Handlers\DefaultHandler.cs:98
   Castle.MicroKernel.DefaultKernel.ResolveComponent(IHandler handler, Type service, IDictionary additionalArguments, IReleasePolicy policy) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\DefaultKernel.cs:777
   Castle.MicroKernel.DefaultKernel.Castle.MicroKernel.IKernelInternal.Resolve(Type service, IDictionary arguments, IReleasePolicy policy) in d:\BuildAgent\work\60b7fa65294e7792\src\Castle.Windsor\MicroKernel\DefaultKernel_Resolve.cs:225
   Website.WindsorControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) in C:\Users\Wayne Douglas\Dev\ProjectWebsite\Website\WindsorControllerFactory.cs:24
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +93
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +346
   System.Web.Mvc.<>c__DisplayClass6.<BeginProcessRequest>b__2() +71
   System.Web.Mvc.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a() +19
   System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Func`1 func) +161
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +405
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

【问题讨论】:

  • 更新了帖子以显示堆栈跟踪
  • 好像它没有获取配置并且抱怨要配置的服务数组为空?也许?

标签: c# wcf castle-windsor wcffacility


【解决方案1】:

我认为您的 web.config 中的 system.servicemodel 元素不太正确。如果您从 Web 应用程序托管服务,则其中不会有客户端元素 - 而不是客户端元素,我认为您应该有一个如下所示的服务元素:

<services>
  <service name="CommandService.WebsiteCommandService">
    <endpoint address="http://commandservice.website.com/WebsiteCommandService.svc"
              binding="basicHttpBinding"
              name="commandService"
              contract="CommandService.IWebsiteCommandService" />
  </service>
</services>   

【讨论】:

  • 有道理!我在想这是因为我正在配置客户端以使用该服务...谢谢。
  • 说实话我不太确定
  • 我又看了一遍 - 你的城堡配置中的类型是“CommandService.WebsiteCommandService, CommandService”,但你有 FromAssembly.InDirectory(new AssemblyFilter(HttpRuntime.BinDirectory, "Web*.dll"))在您的全局 asax 中 - 这是否意味着它仅在程序集中查找 Web 并且由于您的服务位于名为 CommandService 的程序集中它不会找到它?
  • wcf 的组件在 app.config 中,它们通过 .Install(Configuration.FromAppConfig()) 拉入
  • 我已经用更多信息更新了这个 - 上次我尝试的时候要容易得多:(
【解决方案2】:

我终于搞定了!!

组件配置中的类型需要是接口 - 服务。我省略了服务属性,它开始行动!

并且 system.servicemodel 与客户端配置一起使用。

不知道是不是bug?

【讨论】:

  • 有趣。我想应该有一些东西 - 要么接受这种行为,要么抛出异常。你能把这个报告给issues.castleproject.org,并附上一个重现行为的测试(或者在这种情况下没有)
猜你喜欢
  • 2015-09-04
  • 2015-02-19
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2017-05-27
  • 1970-01-01
相关资源
最近更新 更多