问题标签 [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.
c# - 在插件框架中使用抽象类作为契约
抽象类可以用作“主机”和“插件”之间的合同对象吗?这个想法是插件继承了合同(我们称之为适配器)。我们也理解框架中的所有参与者都必须继承MarshalByRefObject
(MBRO)。所以,这就是我们的想法——
主持人:
合同:
插件:
这三个都存在于单独的 asm 中。我们的Host会为每个插件创建一个新的AppDomain,PluginAdapter的创建如下:
编辑:data
的具体类型在哪里myPlugin
?
我们想知道这个框架的实现是否可行。我们已经看到使用接口(IPlugin)进行插件派生的文章,以及使用具体类作为契约的文章。那些文章也会说可以使用抽象类,但没有给出该实现的示例。是否要求合同是一个具体的类?
编辑:在 Richard Blewett 的这个例子中 - C# Reflection - 他使用了一个更简单的实现:
合同:
插件:
现在,如果使用抽象类作为合约,插件不能同时继承合约和 MBRO。那么,什么成为可扩展插件框架的最佳实现。即使最初我们正在为单机操作进行开发,我们是否应该继续实施远程处理?该项目预计将分布在网络上,也可能分布在 Internet 上。我们只是还没有实现 Tcp,因为我们正试图让插件框架的基础知识得到充分理解和操作。
使用环回在单台机器上实现 Tcp 远程处理有意义吗?
delphi - 为什么不能将 Marshaled 接口作为整数(或指针)传递
我将接口的引用从 Visio 加载项传递给 MyCOMServer(Delphi 中的接口编组必须将接口作为指针传递给 MyCOMServer 的内部方法。我尝试将接口作为接口的指针传递给内部方法,但是当我尝试调用时返回转换后接口的方法我得到异常。简单的例子(第一个块执行没有错误,但在第二个块我在寻址到 IVApplication 接口的属性后得到异常):
为什么我不能这样做?
c# - 如何确定实例是否为 MarshalByRef 代理?
我知道有一种方法,我知道我以前做过(很长一段时间),但我不记得或不知道该怎么做!!!
c# - 多个 AppDomain 之间的交互。销毁单例对象的问题
问题如下。有一个应用程序正在创建其他 AppDomain 并在那里加载程序集(自定义用户脚本)。在主应用程序中,有一些对象,引用这些对象将所有权转移给那些创建的 AppDomain。对象本身是 MarshalByRefObject,它们是禁用的生命周期服务(InitializeLifetimeService 返回 null)。
所有这些都有效。但是,这些 AppDomain 被创建和销毁......由于卸载域引起的破坏,以及对创建对象的引用 - 都被遗忘了。
一般来说,由于逐渐内存结束,因为这些“被遗忘”的对象似乎没有被释放,尽管它们在任何地方都没有链接,而且作为链接的 AppDomain 早已被卸载......
因此,问题 - 哪里的错误?怎么了?为什么不卸载域名后豁免设施?
没有人想到- 考虑到自己链接到这些对象的每个域加载,并在他卸载后- 导致每个对象RemotingServices.Disconnect (...)。当终身服务不可用时,它可能必须这样做?
c# - 如何跨 AppDomains 将引用作为方法参数传递?
我一直在尝试使以下代码正常工作(所有内容都在同一个程序集中定义):
我要做的是将在第一个 AppDomain 中创建的“A”实例的引用传递给子域,并让子域在第一个域上执行一个方法。在“B”代码的某个点上,我将调用“remoteObj.GetSomeData()”。必须这样做,因为“GetSomeData”方法中的“byte[]”必须在第一个 appdomain 上“计算”。我应该怎么做才能避免异常,或者我该怎么做才能达到相同的结果?
c# - 跨 AppDomain 边界的垃圾收集对象
当您将继承自 MarshalByRefObject 的对象传递给不同的 AppDomain 时,创建它的 AppDomain 诱导的 GC.Collect() 不会收集该对象,前提是该对象在 GC.Collect( ) 叫什么?
[当我说未植根时,我的意思是不再有开发人员编写的代码访问它。]
似乎该对象没有被收集,而是被提升到下一代!
但是,如果我停止将对象传递给 diff AppDomain,它将按预期收集。
这种行为是设计使然吗?如果有道理呢?
多谢你们,
PS 我知道代码中的 GC.Collect() 不好,原因有很多,我只是想了解 GC 将如何在 MBRO 上发生。
.net - 访问 Form 上的成员可能会导致运行时异常,因为它是 marshal-by-reference 类的字段
访问 Form 上的成员可能会导致运行时异常,因为它是 marshal-by-reference 类的字段
我知道这个警告是什么并且知道如何解决它。
我的问题是为什么这会导致运行时错误?
c# - System.Security.PermissionSet 的 C# Remoting (MarshalByRefObject) 问题
我有一个扩展 MarshalByRefObject 类的类。我创建了一个 HTTPChannel,注册了 ChannelService,并且在读写 int 和 string 属性时一切正常。我的通信类看起来像这样(请注意,这两个类只是一个示例,但我的实际项目看起来非常相似):
我的问题是当我尝试设置为 MyClass[] 属性时发生的异常。MyClass 声明为:
我收到以下异常:System.Security.SecurityException:请求失败。堆栈跟踪显示:
显示的附加信息:
谁能向我解释发生了什么以及我做错了什么?谢谢!
编辑:这只是我尝试设置MyClass数组时的问题。我可以毫无问题地在 MyCommunicationClass 中分配属性 MyClass 属性。
c# - “对象已断开连接或在服务器上不存在”异常
我需要在我的应用程序中使用跨应用程序域调用,有时我有这个 RemotingException:
对象“/2fa53226_da41_42ba_b185_ec7d9c454712/ygiw+xfegmkhdinj7g2kpkhc_7.rem”已断开连接或在服务器上不存在。
目标对象还活着,我已经检查过了。
UPD 我在目标对象的终结器中设置了断点,它永远不会命中。因此,这个对象是活着的并且没有被 GC 处理。
c# - 插件加载到 appDomain 的 mySQL 错误
我正在努力让动态加载与我的插件一起工作。我正在将插件加载到 appdomain 中,但是当我的插件尝试执行任何 mySQL 代码时出现以下异常:
MySql.Data.MySqlClient.MySqlException 未处理
Message=Access denied for user ''@'localhost' (使用密码: NO)
这是 Plugins.cs 上的代码:
这是插件库:
}
插件容器:
最后,插件:
它在
行Plugins.cs
来自 ConverAnesthDatabase.Begin() 方法,因为那里有多个 mySQL 语句。
我可以访问 mySQL 数据库,所以这不是问题。
如何解决此错误?