私はこの問題を自分で解決しました。
場合は、アプリケーションプールのリサイクルと新しいアプリケーションプールを起動作成、すべてのDLLは、新しいAsp.Netテンプレートフォルダにコピーします。
私はアプリケーションドメインにすべての「bin」DLLをロードするように強制するとき、私はビンのアセンブリにタイプを登録します。 Asp.net Tempフォルダのアセンブリではありません。だからUnityはそれが違いのタイプだと思った。
は、今は固定の問題次に
string binPath = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");
foreach (string dll in Directory.GetFiles(binPath, "*.dll", SearchOption.AllDirectories))
{
var assemblyFromCurrentDomain = Assembly.Load(Assembly.LoadFile(dll).FullName);
Debug.Print("Add Assembly : {0}, {1}", assemblyFromCurrentDomain.FullName, assemblyFromCurrentDomain.Location);
}
現在のドメインにアセンブリをロードする方法を変更します。
は、今私はユニティコンテナの登録を確認し、タイプとマッピングのタイプを登録し、両方のあなたはWCFとUnityに統合するにはどうすればよいのユニティ・コンテナ登録コレクション – metavige
に存在していますか?カスタムの 'ServiceHostFactory'や何か別のものを経由しますか?あなたは例外を投げた同じスレッドの登録をチェックしていますか? WCFは本質的にマルチスレッドであり、登録コードが適切なスレッド上で実行されないと問題を引き起こす可能性があります。 –
はい、ServiceHostFactoryを使用し、InstanceProviderを実装します。 InstanceProviderの内部では、UnityContainerを使用してサービスインスタンスを作成します。 しかし、インターフェイスとその実装タイプを登録するには、Asp.Netテンプレートフォルダのアセンブリではなく、binディレクトリでアセンブリを使用します。 – metavige