我有一个关于在AddIn命名空间中实现的.NET框架(目前使用3.5SP1)提供的使用System.AddIn框架的问题。我用简单的AddIn构建了一个原型。此AddIn在WCF的业务逻辑中实例化。
业务逻辑的实现(只显示必要的代码):
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);
}
...
}我创建了两个单元测试。一个调用业务逻辑的直接方法,另一个调用WCF方法。直接调用可以正常工作,但是如果我从WCF激活AddIn,就会得到以下异常:
“无法将透明代理转换为'ERES.ConversionService.Contract.IConversionContract'类型的”
堆栈跟踪:
在ConversionHostViewToContractAdapter_ConstructorInvoker(Object ),在System.AddIn.Hosting.AddInActivator.AdaptToHostT at System.AddIn.Hosting.AddInActivator.ActivateInAppDomainT at System.AddIn.Hosting.AddInActivator.ActivateT at System.AddIn.Hosting.AddInActivator.ActivateT at System.AddIn.Hosting.AddInActivator.ActivateT at System.AddIn.Hosting.AddInToken.ActivateT at ERES.ConversionService.BL.BusinessLayer.Execute(Object toConvert,操作操作)在C:\文档和设置\kc\My文档\Visual 2008\Projects\ConversionServiceSolution\ERES.ConversionService.BL\BusinessLayer.cs:line 44 at ERES.ConversionService.Service.Execute(对象toConvert,操作操作)中,C:\Documents和Settings\kc\My Documents\Visual 2008\Projects\ConversionServiceSolution\ERES.ConversionService\Service.svc.cs:line 25 at SyncInvokeExecute(Object,Object[],Object[] )中的SyncInvokeExecute实例,Object[]输入,( System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) ( Object[]& outputs)
有什么帮助吗?
问候安东·卡尔西克
更新:--我能够用下面的代码来处理这个问题:
ConversionHostView view = token.Value.Activate<ConversionHostView>(AppDomain.CurrentDomain);因此,在这种情况下,只能在与service相同的AddIn上执行AppDomain。但我不明白为什么?
发布于 2012-01-04 12:33:05
看看错误是在哪里产生的,这是当外接程序被调整到主机的时候。
这里的问题是MEF试图找到并转换到它找不到的接口。
您的合同程序集是否与您的外接程序集位于同一个位置?
https://stackoverflow.com/questions/1012205
复制相似问题