0

登録例:

        container.Register(Component.For<IFooService>().ImplementedBy<FooService>().AsWcfService<IFooService>(new DefaultServiceModel().Hosted()).LifestyleTransient());

.svc:

<%@ServiceHost language="C#" Debug="true" Service="Service.FooService" 
Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" %>

WCF は IIS でホストされており、WcfStorm を使用してエンドポイントにヒットすると、リクエストごとに ctor が呼び出されるわけではありません。クライアント側のプロキシを再生成すると、ctor がもう一度呼び出されます。サービスのライフサイクルをクライアント側のプロキシに結合するにはどうすればよいですか?

4

1 に答える 1

0

Transient は Transient のように動作します。つまり、Castle.Windsor は要求に応じて新しいサービス インスタンスを作成します。混乱は、サービスがヒットするたびにこれが発生したわけではないという事実から生じました。この理由は、WCF スタックには、デフォルトで "PerSession" に設定されている "InstanceContextMode" によって定義された独自のサービス ライフタイムの概念があるためです。InstanceContextMode を「PerCall」に変更すると、Castle は (I) 期待どおりにサービスをコミッション/デコミッションします。

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class FooService : IFooService { .. }
于 2014-06-18T06:12:26.923 に答える