首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF中的System.AddIn

WCF中的System.AddIn
EN

Stack Overflow用户
提问于 2009-06-18 11:40:03
回答 1查看 1.3K关注 0票数 3

我有一个关于在AddIn命名空间中实现的.NET框架(目前使用3.5SP1)提供的使用System.AddIn框架的问题。我用简单的AddIn构建了一个原型。此AddIn在WCF的业务逻辑中实例化。

业务逻辑的实现(只显示必要的代码):

代码语言:javascript
复制
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!");
    }
    ...
}

服务的实现(只显示必要的代码):

代码语言:javascript
复制
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)

有什么帮助吗?

问候安东·卡尔西克

更新:--我能够用下面的代码来处理这个问题:

代码语言:javascript
复制
ConversionHostView view = token.Value.Activate<ConversionHostView>(AppDomain.CurrentDomain);

因此,在这种情况下,只能在与service相同的AddIn上执行AppDomain。但我不明白为什么?

EN

回答 1

Stack Overflow用户

发布于 2012-01-04 12:33:05

看看错误是在哪里产生的,这是当外接程序被调整到主机的时候。

这里的问题是MEF试图找到并转换到它找不到的接口。

您的合同程序集是否与您的外接程序集位于同一个位置?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1012205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档