问题标签 [marshalbyrefobject]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1326 浏览

c# - 如何防止 MarshalByRefObject 和 AppDomain 中的内存泄漏?

我试图在运行时编译一些代码以允许我的应用程序中的一些脚本功能,但是我想在沙箱中运行脚本,以防有人试图做一些顽皮的事情。

问题是 - 毕竟完成并且我的输出内存没有被释放,并且为运行代码而生成的“c.dll”文件仍然被我的进程锁定,因此任何删除它的尝试也会失败- 这意味着如果我尝试第二次运行代码,它无法再次编译它,因为“c.dll”已经在“另一个进程”中打开。这是所有代码:

一切开始的地方:

这是沙盒:

这是 CrossAppDomainObject:

请注意,我从 Nathan Evans 的博客https://nbevans.wordpress.com/2011/04/17/memory-leaks-with-an-infinite-lifetime-instance-of-marshalbyrefobject/获得了 CrossAppDomainObject 抽象类

我会很感激任何指导,因为我在这里完全一无所知。

编辑:

在汉斯告诉我回到绘图板之后,我确实这样做了,并使用了这篇 MSDN 文章作为参考:https ://msdn.microsoft.com/en-us/library/bb763046(v=vs.110).aspx

在玩了一会儿之后,我一起破解了这个:

0 投票
0 回答
776 浏览

c# - 如何在VS中调试appdomain返回值

我的 c# 程序正在使用多个 appdomains 来加载/卸载程序集。我在第二个 appdomain 中的程序集正在返回一个继承 MarshalByRefObject 的对象。

我现在的问题是 Visual Studio 告诉我它无法显示有关它的信息。

此上下文不支持获取透明代理的运行时类型。

当我在第二个应用程序域的类中时,我可以看到有关此对象的信息。

我现在的问题是:是否有可能告诉 Visual Studio 在 1.appdomain 中向我显示有关此对象的信息?

编辑:

我找到了解决方案,但这只是一种解决方法。我从/到json序列化和反序列化对象以获得干净的副本。

但如果有更好的解决方案请告诉我:)

编辑2:

一些代码来详细解释它:

0 投票
2 回答
1262 浏览

c# - 如何在插件之间进行通信?

我有一个插件系统,用于MarshalByRefObject为每个插件创建隔离域,因此用户可以重新加载他们认为合适的新版本,而无需关闭主应用程序。

现在我需要允许插件查看当前正在运行的插件,并可能启动/停止特定插件。

我知道如何从包装器发出命令,例如在下面的代码中:

那么我可以,例如:

当然,以上只是一个恢复的样本......

然后在我的包装器上,我有如下方法:

这基本上是一个包装器,用于从列表中发出特定插件的开始/停止,以及一个用于跟踪正在运行的插件的列表:

插件只是一个简单的类,它包含DomainRemoteLoader信息等。

我不明白的是,如何从插件内部实现以下目标。能够:

  • 查看正在运行的插件列表
  • 执行特定插件的启动或停止

或者,如果MarshalByRefObject插件被隔离,或者我必须打开不同的通信路径来实现这一点,这甚至是可能的?

对于赏金,我正在寻找上述可验证的工作示例......

0 投票
0 回答
138 浏览

c# - C# 如何在接口中传递 Linq - MarshalByRefObject

这是here的后续问题,但性质完全不同。我之所以提到它是因为我想提供前提。

基本上我会有一些数据表(或序列化类),它们将包含超过一百万行,并且很难从 SQL 返回。

因此,使用一个示例,我发现我派生了一个 TCP Channelservices MarshalByRefObject,用于返回前 x 行。然而,这对于我想做的事情来说真的不够强大。我很好奇下面的代码,如何为我的接口提供一个 LINQ 语句,以便我可以针对我的 DataTable 运行任何 LINQ。

谢谢!

代码使用——创建两个VS解决方案——启动服务器,启动客户端

--- Server

````客户端

0 投票
0 回答
757 浏览

c# - SerializationException:访问 MarshalByRefObject 时二进制格式无效

我正在尝试从另一个 C# 应用程序不断地向 Unity 应用程序发送一个锯齿状的浮点数组。

我有一个 C# dll,它使用 MarshalByRefObject 并为一个简单的测试服务器应用程序和一个简单的测试客户端应用程序打开一个 Ipc 通道。两个应用程序都能够成功共享数据。这是dll的代码:

但是,当尝试用 Unity 应用程序替换客户端应用程序时,每当我尝试访问 SharedObject 时都会收到错误消息。这是 Unity 控制台所说的:

每当我在 dll 中调用“TestDLL”函数时,我都会得到“OK”字符串,因此我假设 dll 已正确集成为插件。我还尝试构建为 x86 和 x64 并降级 .net 框架,但问题仍然存在。

你能指出我解决这个问题的正确方向吗?或者,如果您知道将数据从非 Unity 应用程序发送到 Unity 应用程序的更好方法,请告诉我!

谢谢!

0 投票
1 回答
129 浏览

c++-cli - MarshalByRefObject 导致 C++ 程序挂起

我有一个客户端程序,它使用 MarshalByRefObject 从远程服务器获取变量。有时程序会在远程服务器上运行,当我尝试获取该变量时,我的客户端程序只是挂起。有没有办法让这个变量的调用超时?

0 投票
1 回答
167 浏览

parameters - xamarin 表单...无法从 SqlCommand 获取参数值...错误“MarshalByRefObject”声称它是在“mscorlib”中定义的......找不到

我有一个 xamarin.forms 项目。在 PCL 中,我有一个包含这 3 行代码的类....

1)SqlCommand cmd = new SqlCommand();....(注意:这行代码有效)

2)cmd.Parameters.Add(new SqlParameter("@UserID", SqlDbType.Char, 5)).Direction = ParameterDirection.Input;....(注意:这行代码有效)

3)var userid = cmd.Parameters["@UserID"].Value;....(注意:这行代码不起作用)

我收到这条消息...

““MarshalByRefObject”类型的引用声称它是在“mscorlib”中定义的,但找不到

这 3 行代码在 Android 特定项目中有效,但在 PCL 类中无效

我可以将参数添加到 PCL 类中的 SqlCommand 但无法检索值

在此先感谢您的帮助

0 投票
0 回答
68 浏览

.net - .NET 远程处理 - 嵌套 MarshalByRefObject

我将弃用的 .NET 远程处理用于 WCF 无法实现的目的。我有一种情况,我使用 aMarshalByRefObject但是嵌套MarshalByRefObject的 s 不是作为属性公开而是在内部使用。

我在客户端使用 ClientSponsor 来管理这些对象的生命周期。是否需要在所有嵌套MarshalByRefObject的 s 上进行注册,或者在MarshalByRef对客户端的“可见”根(它确实是一个接口,因此没有 DLL 共享)上进行注册就足够了?

先感谢您

0 投票
0 回答
128 浏览

c# - 从 C# 中的不同进程访问类的实例

我有一个名为“Core”的项目,它声明了一个接口。我有一个名为“Service”的项目,它实例化了一个实现该接口的类(它引用了它的依赖项上的“Core”项目)。

这两个项目独立运行,因为我可以运行“核心”(它是一个 EXE)。如果我这样做,我想验证“服务”是否正在运行,如果是,获取在“服务”进程上创建的类的实例并调用它的方法。

它看起来像这样(几乎)。

关于“核心”项目

在“服务”项目上

它应该以某种方式从一个进程编组到另一个进程,但我不熟悉会调用它的 Interop 方法。

0 投票
0 回答
38 浏览

c# - 是否可以覆盖 MarshalByRefObject#Equals?

MarshalByRefObject各州的文件,

当您从中派生一个对象MarshalByRefObject以供跨应用程序域边界使用时,您不应覆盖其任何成员,也不应直接调用其方法。

此警告是否适用于继承的方法,特别是Equalsand GetHashCode,或仅适用于添加的方法MarshalByRefObject