0

私は大規模な NHibernate のアップグレードをほぼ完了し、最終的に Castle のアップグレードにもなりました。ServiceSecurityContext.Current が null であるというエラーが発生するため、ASP.NET Web サイトが実行されないことを除けば、ほぼ完了です。私は間違っている可能性があります (私はまだ Castle に慣れていません)、WCF 機能の登録に加えた変更と関係があると思います。

以前 (ServiceLocator.cs というクラスに) 次のようなコードがありました。

    /// <summary>
    /// Register the WindsorServiceHostFactory with the container
    /// </summary>
    public static void RegisterWcfServer()
    {
        RegisterWcfFacility();
        DefaultServiceHostFactory.RegisterContainer(Container.Kernel);
    }

RegisterWcfFacility() メソッドは次のようになります。

    private static void RegisterWcfFacility()
    {
        IFacility[] facilities = Container.Kernel.GetFacilities();
        bool hasWcfFacility = false;
        foreach (IFacility facility in facilities)
        {
            if (facility.GetType() != typeof (WcfFacility)) 
                continue;

            hasWcfFacility = true;
            break;
        }

        if (!hasWcfFacility)
            Container.AddFacility<WcfFacility>();
    }

その後、これを次のように変更しました (明らかにコンパイルしようとしていたため、DefaultServiceHostFactory には「RegisterContainer」メソッドがなくなりました)。

    /// <summary>
    /// Register the WindsorServiceHostFactory with the container
    /// </summary>
    public static void RegisterWcfServer()
    {
        RegisterWcfFacility();

        // see:  http://stackoverflow.com/questions/9729395/castlewindsor-3-0-and-defaultservicehostfactory-registercontainer

        // obsolete:
        //DefaultServiceHostFactory.RegisterContainer(Container.Kernel);           

        Container.Register(Component.For<DefaultServiceHostFactory>());
    }

そして、私の新しいバージョンの "RegisterWcfFacility()" は次のようになります。

    private static void RegisterWcfFacility()
    {
        var facilities = Container.Kernel.GetFacilities();
        var hasWcfFacility = facilities.Any(facility => facility.GetType() == typeof (WcfFacility));

        if (!hasWcfFacility)
            Container.AddFacility<WcfFacility>();
    }

私は主に次のようなことを尋ねるためにこれを投稿しています:私は完全に間違ったツリーを吠えていますか? この施設を登録する方法は合法ですか? 私の ServiceSecurityContext.Current が null である理由を説明できますか? (そして、はい、私はこれを見ました):

https://groups.google.com/forum/#!topic/castle-project-devel/VOQKW4XlvLM%5B1-25%5D

アドバイスをありがとう。乾杯、-デイブ

4

1 に答える 1

1

私はちょうど同じ問題を抱えていて、ここで答えを見つけました。App_Code フォルダー内の初期化クラスは次のようになります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Castle.Windsor;
using Castle.Facilities.WcfIntegration;

namespace YourNamespace
{
    public static class InitialiseService
    {
        public static void AppInitialize()
        {
            var container = new WindsorContainer();

            container.AddFacility<WcfFacility>();
        }
    }
}

もちろん、これはパッケージ マネージャーから次の方法でインストールされる WCF Castle Facility に依存しています。

install-package Castle.WcfIntegrationFacility

お役に立てれば :)

于 2012-08-23T02:50:03.367 に答える