System.AddIn名前空間に実装されている.NET Framework(現在3.5 SP1を使用)によって提供されるAddInフレームワークの使用に関する質問があります。私は単純なAddInでプロトタイプを構築します。このAddInは、WCFサービスのビジネスロジックでインスタンス化されます。ビジネスロジックのWCFのSystem.AddIn
実装(のみ必要なコードが表示されている):サービスの
internal class BusinessLayer : IBusinessLayer
{
public object Execute(object toConvert, Operation operation)
{
IDictionary<string, AddInToken> tokens = AddIns.Store.GetAddInsTokens(@"c:\SomePathToStore");
foreach (KeyValuePair<string, AddInToken> token in tokens)
{
if (operation.Name == token.Key && operation.Version == token.Value.Version)
{
ConversionHostView view = token.Value.Activate<ConversionHostView>(AddInSecurityLevel.FullTrust);
object converted = view.Convert(toConvert);
AddInController.GetAddInController(view).Shutdown();
return converted;
}
}
throw new InvalidOperationException("No operation found!");
}
...
}
実装(のみ必要なコードが表示されます):
public class Service : IServiceContract
{
IBusinessLayer bl;
public Service()
{
bl = BL.BLFactory.GetBL();
}
public object Execute(object toConvert, ERES.ConversionService.Entity.Operation operation)
{
return bl.Execute(toConvert, operation);
}
...
}
は、私は2つのユニットテストを作成しました。ビジネスロジックの1つの直接呼び出しメソッド、他の1つのWCFメソッド。直接の呼び出しが正常に動作しますが、私はWCFからアドインを有効にした場合、私はこの例外を取得:
「『ERES.ConversionService.Contract.IConversionContract』
スタックトレース入力する透過プロキシをキャストすることができません:
をSystem.AddIn.Hosting.AddInActivator.ActivateInAppDomainでSystem.AddIn.Hosting.AddInActivator.AdaptToHost [T](AddInTokenパイプライン、IContract addInContract) でConversionHostViewToContractAdapter_ConstructorInvoker(オブジェクト) [T](AddInTokenパイプライン、アプリケーションドメインのドメイン、AddInControllerImplでコントロ充填剤、System.AddIn.Hosting.AddInActivator.Activate [T](AddInTokenトークン、AddInSecurityLevelレベルでSystem.AddIn.Hosting.AddInActivator.Activate [T](AddInTokenトークンのPermissionSetのPermissionSet、ストリングappDomainName) ブールweOwn) 、 ERES.ConversionService.BLでSystem.AddIn.Hosting.AddInToken.Activate [T](AddInSecurityLevel trustLevel) でSystem.AddIn.Hosting.AddInActivator.Activate [T](AddInTokenトークン、AddInSecurityLevelレベル) でストリングappDomainName) 。 Visual Studio 2008 \ Projects \ ConversionServiceSolution \ ERES.ConversionService.BL \ BusinessLayer.cs:ERES.ConversionService.Serviceの行44 で、BusinessLayer.Execute(Object toConvert、Operation操作)をC:\ Documents and Settings \ kc \ My Documents \ C:\ Documents and Settings \ kc \ My Documents \ Visual Studの.Execute(Object toConvert、Operationオペレーション) SyncInvokeExecute(Object、Object []、Object [])の at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance、Object [ 】入力、オブジェクト[] &出力)System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc & RPC)
任意の助けで ?
よろしく アントンKalcik
UPDATE:私はこのコードでこれを一周することができた :だから
ConversionHostView view = token.Value.Activate<ConversionHostView>(AppDomain.CurrentDomain);
この場合では、唯一のと同じのAppDomainでアドインを実行することしかできませんサービス自己。しかし、なぜ私は理解していないのですか?
申し訳ありませんが、2年前と同じプロトタイプだったので、もうコードはありません。ありがとうございました。 –