この問題を抱えている人を他に見つけていないので、これが起こっているのは私自身のせいだと思います. WCF とキャッスル ウィンザー IoC コンテナーに関しては、私は非常に緑色なので、これがおそらくこれが起こっている最初の理由でしょう。とにかく、私はこれに数日間苦労してきましたが、まだその理由を見つけていません。
まず、Castle Windsor を使用してサービスを登録しました。
var baseUri = new Uri("http://localhost:49246");
_container = new WindsorContainer();
var returnFaults = new ServiceDebugBehavior
{
IncludeExceptionDetailInFaults = true,
HttpHelpPageEnabled = true
};
var metadata = new ServiceMetadataBehavior { HttpGetEnabled = true };
_container.Register(
Component.For<IServiceBehavior>().Instance(returnFaults),
Component.For<IServiceBehavior>().Instance(metadata));
var baseUri = new Uri("http://localhost:49246");
_container = new WindsorContainer();
var returnFaults = new ServiceDebugBehavior
{
IncludeExceptionDetailInFaults = true,
HttpHelpPageEnabled = true
};
var metadata = new ServiceMetadataBehavior { HttpGetEnabled = true };
_container.Register(
Component.For<IServiceBehavior>().Instance(returnFaults),
Component.For<IServiceBehavior>().Instance(metadata));
_container
.Register(
Component
.For<IAccountDataAccessor>()
.ImplementedBy<AccountDataAccessor>(),
Component
.For<IInstitutionDataAccessor>()
.ImplementedBy<InstitutionDataAccessor>(),
Component
.For<IRelationshipDataAccessor>()
.ImplementedBy<RelationshipDataAccessor>(),
Component
.For<ITransactionDataAccessor>()
.ImplementedBy<TransactionDataAccessor>()
);
_container.AddFacility<WcfFacility>(f => { f.CloseTimeout = TimeSpan.Zero; });
_container.Register(
Component
.For<IAccountDataService>()
.ImplementedBy<AccountDataService>()
.Named("AccountDataService")
.LifeStyle.Is(Castle.Core.LifestyleType.Singleton)
.AsWcfService(new DefaultServiceModel()
.AddBaseAddresses(baseUri)
.AddEndpoints(WcfEndpoint
.ForContract(typeof(IAccountDataService))
.BoundTo(new WSHttpBinding()))),
Component
.For<IInstitutionDataService>()
.ImplementedBy<InstitutionDataService>()
.Named("InstitutionDataService")
.LifeStyle.Is(Castle.Core.LifestyleType.Singleton)
.AsWcfService(new DefaultServiceModel()
.AddBaseAddresses(baseUri)
.AddEndpoints(WcfEndpoint
.ForContract(typeof(IInstitutionDataService))
.BoundTo(new WSHttpBinding()))),
Component
.For<IRelationshipDataService>()
.ImplementedBy<RelationshipDataService>()
.Named("RelationshipDataService")
.LifeStyle.Is(Castle.Core.LifestyleType.Singleton)
.AsWcfService(new DefaultServiceModel()
.AddBaseAddresses(baseUri)
.AddEndpoints(WcfEndpoint
.ForContract(typeof(IRelationshipDataService))
.BoundTo(new WSHttpBinding()))),
Component
.For<ITransactionDataService>()
.ImplementedBy<TransactionDataService>()
.Named("TransactionDataService")
.LifeStyle.Is(Castle.Core.LifestyleType.Singleton)
.AsWcfService(new DefaultServiceModel()
.AddBaseAddresses(baseUri)
.AddEndpoints(WcfEndpoint
.ForContract(typeof(ITransactionDataService))
.BoundTo(new WSHttpBinding()))));
AccountDataService のサービス参照を取得しようとすると、問題なく動作し、エラーは発生しません。しかし、InstitutionDataService へのサービス参照を追加しようとすると、次のような例外がスローされます。
Could not find a component with name InstitutionDataService, did you forget to register it?
これは非常に苛立たしいものであり、Castle Windsor のドキュメント (またはドキュメントの欠如) で明確な答えを見つけることができないようです。そして、このSOの質問で提案されているソリューションを実装しようとしました:
しかし、これもうまくいきませんでした。どのコンポーネントも登録されていないようです。また、役立つ場合は、これが私の svc マークアップです。
<%@ ServiceHost Language="C#" Debug="true" Service="AccountDataService"
Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" %>
そしてそれはどのサービスも同じです。
私の質問は、私のコンポーネントが AccountDataService と共に登録されないのはなぜですか?