问题标签 [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 投票
4 回答
2116 浏览

c# - 在插件框架中使用抽象类作为契约

抽象类可以用作“主机”和“插件”之间的合同对象吗?这个想法是插件继承了合同(我们称之为适配器)。我们也理解框架中的所有参与者都必须继承MarshalByRefObject(MBRO)。所以,这就是我们的想法——

主持人

合同

插件

这三个都存在于单独的 asm 中。我们的Host会为每个插件创建一个新的AppDomain,PluginAdapter的创建如下:

编辑data的具体类型在哪里myPlugin

我们想知道这个框架的实现是否可行。我们已经看到使用接口(IPlugin)进行插件派生的文章,以及使用具体类作为契约的文章。那些文章也会说可以使用抽象类,但没有给出该实现的示例。是否要求合同是一个具体的类?

编辑:在 Richard Blewett 的这个例子中 - C# Reflection - 他使用了一个更简单的实现:

合同

插件

现在,如果使用抽象类作为合约,插件不能同时继承合约和 MBRO。那么,什么成为可扩展插件框架的最佳实现。即使最初我们正在为单机操作进行开发,我们是否应该继续实施远程处理?该项目预计将分布在网络上,也可能分布在 Internet 上。我们只是还没有实现 Tcp,因为我们正试图让插件框架的基础知识得到充分理解和操作。

使用环回在单台机器上实现 Tcp 远程处理有意义吗?

0 投票
2 回答
718 浏览

delphi - 为什么不能将 Marshaled 接口作为整数(或指针)传递

我将接口的引用从 Visio 加载项传递给 MyCOMServer(Delphi 中的接口编组必须将接口作为指针传递给 MyCOMServer 的内部方法。我尝试将接口作为接口的指针传递给内部方法,但是当我尝试调用时返回转换后接口的方法我得到异常。简单的例子(第一个块执行没有错误,但在第二个块我在寻址到 IVApplication 接口的属性后得到异常):

为什么我不能这样做?

0 投票
1 回答
173 浏览

c# - 如何确定实例是否为 MarshalByRef 代理?

我知道有一种方法,我知道我以前做过(很长一段时间),但我不记得或不知道该怎么做!!!

0 投票
1 回答
929 浏览

c# - 多个 AppDomain 之间的交互。销毁单例对象的问题

问题如下。有一个应用程序正在创建其他 AppDomain 并在那里加载程序集(自定义用户脚本)。在主应用程序中,有一些对象,引用这些对象将所有权转移给那些创建的 AppDomain。对象本身是 MarshalByRefObject,它们是禁用的生命周期服务(InitializeLifetimeService 返回 null)。

所有这些都有效。但是,这些 AppDomain 被创建和销毁......由于卸载域引起的破坏,以及对创建对象的引用 - 都被遗忘了。

一般来说,由于逐渐内存结束,因为这些“被遗忘”的对象似乎没有被释放,尽管它​​们在任何地方都没有链接,而且作为链接的 AppDomain 早已被卸载......

因此,问题 - 哪里的错误?怎么了?为什么不卸载域名后豁免设施?

没有人想到- 考虑到自己链接到这些对象的每个域加载,并在他卸载后- 导致每个对象RemotingServices.Disconnect (...)。当终身服务不可用时,它可能必须这样做?

0 投票
3 回答
3694 浏览

c# - 如何跨 AppDomains 将引用作为方法参数传递?

我一直在尝试使以下代码正常工作(所有内容都在同一个程序集中定义):

我要做的是将在第一个 AppDomain 中创建的“A”实例的引用传递给子域,并让子域在第一个域上执行一个方法。在“B”代码的某个点上,我将调用“remoteObj.GetSomeData()”。必须这样做,因为“GetSomeData”方法中的“byte[]”必须在第一个 appdomain 上“计算”。我应该怎么做才能避免异常,或者我该怎么做才能达到相同的结果?

0 投票
1 回答
1286 浏览

c# - 跨 AppDomain 边界的垃圾收集对象

当您将继承自 MarshalByRefObject 的对象传递给不同的 AppDomain 时,创建它的 AppDomain 诱导的 GC.Collect() 不会收集该对象,前提是该对象在 GC.Collect( ) 叫什么?

[当我说未植根时,我的意思是不再有开发人员编写的代码访问它。]

似乎该对象没有被收集,而是被提升到下一代!

但是,如果我停止将对象传递给 diff AppDomain,它将按预期收集。

这种行为是设计使然吗?如果有道理呢?

多谢你们,

PS 我知道代码中的 GC.Collect() 不好,原因有很多,我只是想了解 GC 将如何在 MBRO 上发生。

0 投票
4 回答
13178 浏览

.net - 访问 Form 上的成员可能会导致运行时异常,因为它是 marshal-by-reference 类的字段

访问 Form 上的成员可能会导致运行时异常,因为它是 marshal-by-reference 类的字段

我知道这个警告是什么并且知道如何解决它。

我的问题是为什么这会导致运行时错误?

0 投票
0 回答
1096 浏览

c# - System.Security.PermissionSet 的 C# Remoting (MarshalByRefObject) 问题

我有一个扩展 MarshalByRefObject 类的类。我创建了一个 HTTPChannel,注册了 ChannelService,并且在读写 int 和 string 属性时一切正常。我的通信类看起来像这样(请注意,这两个类只是一个示例,但我的实际项目看起来非常相似):

我的问题是当我尝试设置为 MyClass[] 属性时发生的异常。MyClass 声明为:

我收到以下异常:System.Security.SecurityException:请求失败。堆栈跟踪显示:

显示的附加信息:

谁能向我解释发生了什么以及我做错了什么?谢谢!

编辑:这只是我尝试设置MyClass数组时的问题。我可以毫无问题地在 MyCommunicationClass 中分配属性 MyClass 属性。

0 投票
7 回答
31971 浏览

c# - “对象已断开连接或在服务器上不存在”异常

我需要在我的应用程序中使用跨应用程序域调用,有时我有这个 RemotingException:

对象“/2fa53226_da41_42ba_b185_ec7d9c454712/ygiw+xfegmkhdinj7g2kpkhc_7.rem”已断开连接或在服务器上不存在。

目标对象还活着,我已经检查过了。

UPD 我在目标对象的终结器中设置了断点,它永远不会命中。因此,这个对象是活着的并且没有被 GC 处理。

0 投票
1 回答
203 浏览

c# - 插件加载到 appDomain 的 mySQL 错误

我正在努力让动态加载与我的插件一起工作。我正在将插件加载到 appdomain 中,但是当我的插件尝试执行任何 mySQL 代码时出现以下异常:

MySql.Data.MySqlClient.MySqlException 未处理
Message=Access denied for user ''@'localhost' (使用密码: NO)

这是 Plugins.cs 上的代码:

这是插件库:

}

插件容器:

最后,插件:

它在

Plugins.cs来自 ConverAnesthDatabase.Begin() 方法,因为那里有多个 mySQL 语句。

我可以访问 mySQL 数据库,所以这不是问题。

如何解决此错误?