这个让我难以忍受了几个小时,我绝对没有想法。我有以下远程代码:
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以及作为管理员的所有流程,以查看是否存在安全问题,但这也无法解决问题。
答案 0 :(得分:1)
这个问题和答案:
建议如果服务器和客户端中使用的.NET CLR的版本不同,则会发生此错误,而使用.NET Remoting,它们都必须是CLR的相同版本。我不确定是否是这种情况,但你可能想检查....