.NET Remoting可以从Web应用程序运行,但不能在WCF主机中运行

时间:2014-05-27 22:41:53

标签: c# .net wcf .net-remoting

这个让我难以忍受了几个小时,我绝对没有想法。我有以下远程代码:

private static IRolesAndResourcesManager InternalConnect(string host, string operatorName)
{
    string url = string.Format("tcp://{0}:{1}/IProxyFactory", host, ServicePort);
    object o = Activator.GetObject(typeof (IProxyFactory), url);
    IProxyFactory factory = (IProxyFactory) o;

    return factory.CreateRolesAndResourcesManager(operatorName);
}

当从我们的网站内调用它时,它可以正常工作。但是,我们还从WCF托管服务(基本上是控制台应用程序)链接到同一个DLL。当我在该过程中调用相同的方法时,我在后续行中得到一个例外:

return factory.CreateRolesAndResourcesManager(operatorName); // <-- Exception!

例外是:

  

System.InvalidCastException:返回参数的类型无效。\ r \ n   在System.Runtime.Remoting.Proxies.RealProxy.ValidateReturnArg(Object   arg,输入paramType)

到目前为止,我发现的所有内容都表明存在某种DLL不匹配的情况;好像WCF进程链接到旧版本的DLL。但是,我尝试删除每个二进制文件,清理,重建。哎呀,我曾尝试删除整个征兵并再次检查Subversion中的所有内容。我还可以验证在Remoting主机端运行CreateRolesAndResourcesManager方法并返回有效数据。

除了DLL不匹配外,是否有其他任何可能导致此类异常的内容?有没有办法获得有关此错误的更多信息?

更新

肯定不是CLR版本不匹配。所有三个进程(IIS Express,远程处理主机,WCF进程)都具有以下Environment.Version

{4.0.30319.18444}
    Build: 30319
    Major: 4
    MajorRevision: 0
    Minor: 0
    MinorRevision: 18444
    Revision: 18444

我还运行Visual Studio以及作为管理员的所有流程,以查看是否存在安全问题,但这也无法解决问题。

1 个答案:

答案 0 :(得分:1)

这个问题和答案:

System.InvalidCastException when creating a client activated object using an older version of an interface defined in a strong named assembly

建议如果服务器和客户端中使用的.NET CLR的版本不同,则会发生此错误,而使用.NET Remoting,它们都必须是CLR的相同版本。我不确定是否是这种情况,但你可能想检查....