Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Autofac无法从远程程序集初始解析对象(强制转换为已知类型)_C#_Wcf_Dependency Injection_Autofac_Remoting - Fatal编程技术网

C# Autofac无法从远程程序集初始解析对象(强制转换为已知类型)

C# Autofac无法从远程程序集初始解析对象(强制转换为已知类型),c#,wcf,dependency-injection,autofac,remoting,C#,Wcf,Dependency Injection,Autofac,Remoting,这是我的WCF(vs2015@net452)autofac(v4.6.1)设置: MyService.dll: builder.Register(c => (ISession)RemoteObjectFactory.GetInstance(typeof(MySessionBase))).As<ISession>().SingleInstance(); ... var session = AutofacHostFactory.Container.Resolve<ISessi

这是我的WCF(vs2015@net452)autofac(v4.6.1)设置:

MyService.dll:

builder.Register(c => (ISession)RemoteObjectFactory.GetInstance(typeof(MySessionBase))).As<ISession>().SingleInstance();
...
var session = AutofacHostFactory.Container.Resolve<ISession>();

<Message>An exception was thrown while executing a resolve operation. See the InnerException for details.
Could not load file or assembly "MyRemotingHost, Version=1.0.6442.29085, Culture=neutral, PublicKeyToken=null" or one of its dependencies. File not found(See inner exception for details.)</Message>
<StackTrace>at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable`1 parameters)&#xD;
at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object&amp; instance)&#xD;
at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)&#xD;
at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters)&#xD;
at My.DoSomeWork() at C:\Projects\...
<Type>Autofac.Core.DependencyResolutionException</Type>
RegisterInstance抛出相同的错误

更新2 第二次(以及随后的)解析尝试不会抛出奇怪的错误

builder.Register(c => (ISession)RemoteObjectFactory.GetInstance(typeof(MySessionBase))).As<ISession>().SingleInstance();
...
var session1 = AutofacHostFactory.Container.Resolve<ISession>();
var session2 = AutofacHostFactory.Container.Resolve<ISession>();
我无法进行更多调查,因为我坚持使用VS2015,而autofac源已经使用VS2017格式。

问题在于:

在该行之前添加检查可以解决问题:

// cant use GetType() on TransparentProxy as it may throw error
if (RemotingServices.IsTransparentProxy(instance)) return;

这听起来像是一个100%的远程处理问题,与Autofac无关,尤其是当您将Autofac从图片中删除时,错误会弹出。您可能会考虑将问题标题更新为更远程化的方法来获得正确的眼睛集。如果没有AutoFac,错误不会弹出。代码>会话是透明代理。这似乎是问题所在。也许我误解了。如果不调用
RegisterInstance
,那么对象
会话
是否正常?目前尚不清楚是调用
RemoteObjectFactory.GetInstance
导致了问题,还是通过Autofac的解决方案是错误的。从“更新”听起来像是对
RemoteObjectFactory.GetInstance
的调用,这意味着与远程处理相关的标题可以为您提供更合适的帮助集。我对更新进行了编辑,以澄清这一点。如果没有autofac,它可以正常工作。@TravisIllig Update2-错误仍然存在,但它只发生一次,这很奇怪。
private void CompleteActivations()
{
    var completed = _successfulActivations;
    ResetSuccessfulActivations();

    foreach (var activation in completed)
        activation.Complete();
}
var instanceType = instance.GetType();
// cant use GetType() on TransparentProxy as it may throw error
if (RemotingServices.IsTransparentProxy(instance)) return;