如何从创建新的应用程序实例中停止CreateInstanceSlow

时间:2017-11-17 20:07:30

标签: c# wcf

我有两个应用程序,A和B,并希望在两者之间发送数据。这是我的情景:

  • A始终在运行,并且会创建"发件人服务"
  • 当B运行时,它会创建自己的"接收器服务,"并通过"发件人服务"
  • 查找并连接到A.
  • B通知A via"发件人服务" B正在运行,现在可以接受要发送的数据
  • A连接到"接收器服务"并将数据发送给B

这一切都运作良好,甚至可以显示我的联系正确。但是,当我看到B中的数据时,我看不到它,这意味着A没有正确地将数据发送到B。

当我查看调用堆栈时,我看到:

[Native to Managed Transition]  
[Managed to Native Transition]  
mscorlib.dll!System.RuntimeType.CreateInstanceSlow(bool publicOnly, bool skipCheckThis, bool fillCache, ref System.Threading.StackCrawlMark stackMark)  
mscorlib.dll!System.Activator.CreateInstance(System.Type type, bool nonPublic)  
mscorlib.dll!System.Runtime.Remoting.RemotingConfigHandler.RemotingConfigInfo.StartupWellKnownObject(string asmName, string svrTypeName, string URI, System.Runtime.Remoting.WellKnownObjectMode mode, bool fReplace)   
mscorlib.dll!System.Runtime.Remoting.RemotingConfigHandler.RemotingConfigInfo.StartupWellKnownObject(string URI)    
mscorlib.dll!System.Runtime.Remoting.RemotingConfigHandler.CreateWellKnownObject(string uri)    
...

这个调用堆栈,以及在我的两个服务的默认构造函数上设置断点,表明正在创建新实例,这意味着连接确实正确发生,但是正在创建随机实例。

有关如何阻止创建这些随机实例的任何想法,以便我的真实A实例可以发送我真实的B实例数据吗?注意:在我的两个服务中,我已经包括:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]

1 个答案:

答案 0 :(得分:0)

我的解决方案是以下各项的混合:

  1. [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]在两个应用程序中设置
  2. 制作在应用程序[Serializable]
  3. 之间发送的相应部分