问题标签 [servicedcomponent]

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 投票
1 回答
436 浏览

c# - 如何在 COM+ 应用程序池实例之间共享属性?

我有一个用 C# (ServicedComponent) 编写的 COM+ 应用程序。在所有情况下,应用程序池大小 > 1。我正在使用 SharedPropertyGroups 来保留和共享数据。根据我的测试,尚不清楚应用程序的所有正在运行的实例是否共享相同的值。

存储在 SharedPropertyGroup 中的属性是否在同一个 COM+ 应用程序的所有实例之间共享?

0 投票
1 回答
230 浏览

wpf - 托管 WPF 和本机代码互操作。托管在 ServicedComponent 中的 WPF

我正在努力在 ServicedComponent 中托管 WPF 应用程序。我有一个 WPF 库,我需要从本机代码中使用它。为了达到这个目标,我创建了一个 outproc COM+ 组件,将所有 WPF 调用放入其中,并从本机代码调用该组件,如下所示:

它作为原型完美地工作,但是当我添加实际的 WPF 功能时,一切都开始分崩离析。

由于臭名昭著的 WPF 异常,我无法在 COM+ ServicedComponent 中创建 WPF 窗口,"The calling thread must be STA, because many UI components require this". 解决方案之一是使用 Dispatcher。问题是 WPF 调度程序Dispatcher.CurrentDispatcher没有调用函数BeginInvoke()

另一种选择是使用Application.Current.Dispatcher. 这种方法的问题在于,在这个调用Application.Current中为空,因此没有可用的 Dispatcher。

好的。接下来要尝试的是在 STA 模型中产生威胁,如下所示:

这段代码有部分帮助。由于已设置为 STA 模型的生成线程无论如何都会在 MTA 中调用,如果 _Window 是类成员(但如果不是,则它是 STA),因此new Window()抛出相同的“必须是 STA”异常。

在这一点上,我完全陷入了困境。如何在 ServicedComponent 中实际创建 WPF 元素?或者我如何在本机代码和 WPF 之间进行交互?任何想法表示赞赏。

更新:奇怪的是,赋值 (_Window = new Window()) 影响线程模型。如果 _Window 是该类的成员,则踩踏模型仍然是 MTA。如果它是局部变量,则线程模型将更改为 MTA。似乎应该以其他方式将 _Window 分配为该类的成员。

0 投票
1 回答
572 浏览

datetime - 当从远程 MarshalByRefObject 传递到 ServicedComponent 时,.Net / C# DateTime 字段会更改,因为日期是 DayLight 时间更改

我有一个配置为 SingleCall 的远程托管对象。它是旧式 .Net 远程处理对象,配置为 RemotingConfiguration.Configure(remotingConfigPath, false)。该对象毫无问题地接收 DataSet 中的 DateTime 字段,并将其传递给标记为 [AutoComplete] 的 ServicedComponent (COM+) 方法。就调用而言,该字段很好。现在,只要 [AutoComplete] 方法接收到 DateTime,它就会移动 1 小时。它肯定是由 .Net 框架转移的。两者之间没有用户代码。我认为,这种转变发生在某些日期,即夏令时更改日期。

它必须是日期序列化的东西,它应该在它通过 AppDomain 时发生。Like Serviced 组件使用自己的时区并将接收到的日期转换为该时区。但奇怪的是,如果我直接调用 ServicedComponent 而不将其配置为 .Net 远程处理,则不会发生日期更改。ServicedComponent 正在处理中。客户端和服务器位于同一台机器上,客户端的 CurrentUICulture 和 CurrentCulture 的 TimeZone GMT+2 和区域设置设置为土耳其/土耳其语,.net 文化设置为 tr-TR。请帮助解决问题提前谢谢


0 投票
1 回答
69 浏览

c# - 服务组件界面未显示

我创建了一个服务组件来访问存储在 SQL Server 数据库中的电子邮件。它只有一个公共方法。我确实应用了这个问题中提到的属性

当我在本地组件服务中打开组件时。我可以看到我的 ReadEmail 界面(版本:组件服务的 6.2)

但是当我尝试在服务器上打开它时,我不能。(版本:组件服务的 2001.12.4720.3959)

我正在使用 .NET 3.5

它怀疑它可能与不同版本的组件服务有关,但我有其他组件并且它们确实显示正确

0 投票
1 回答
776 浏览

c# - 无法单步调试服务组件源代码

我在 C# 中开发了一个继承 ServicedComponent 的 COM+ 组件。这是它的样子:

我有另一个测试项目,我称之为这个组件。

我无法到达第二个断点。这在我切换到 VS 2012 之前有效。奇怪的是切换到 2012 之后它也不再在 VS 2010 中工作。

我已经试过了,

  • 附加到进程
  • 在调试设置中未选中“仅启用我的代码”

有人可以从这里指导吗?

更新 1

从 Mike 提供的链接中,我在 DLL 和 PDB 文件所在的同一文件夹中为我的 DLL 尝试了 symchk。它失败并显示 PDB 不匹配或未找到错误。我不知道如何解决这个错误。

0 投票
1 回答
168 浏览

c# - 单例服务组件

我正在尝试将服务组件实现为单例。目前,我的代码是这样的:

我遵循汇集它的模式,最小和最大实例计数为 1。我签署了我的程序集并使用 regasm 和 regsvcs 注册它。它显示在组件服务控制台中,并且看起来没问题。但是,当我在不同的应用程序中实例化它时,我似乎没有得到相同的实例。有什么想法吗?

0 投票
0 回答
162 浏览

.net - 带有事件处理的 .Net 服务组件

我正在尝试制作一个进程外的.Net DLL;使用示例代码,我可以制作一个进程外的 COM DLL。但是,我在实现事件处理时遇到了一些问题。

根据代码,组件公开以下事件:

在 VB.Net 表单应用程序中处理该事件会引发异常。以下是详细信息:

异常详情:

堆栈跟踪:

在 System.RuntimeMethodHandle.SerializationInvoke(IRuntimeMethodInfo 方法,对象目标,SerializationInfo 信息,StreamingContext 和上下文)在 System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(对象 obj,SerializationInfo 信息,StreamingContext 上下文)在 System.Runtime.Serialization.ObjectManager.FixupSpecialObject( ObjectHolder holder)在 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)在 System.EnterpriseServices 的 System.Runtime.Serialization.ObjectManager.DoFixups()。 System.EnterpriseServices.ComponentServices.ConvertToMessage(String s, Object tp) 在 System.EnterpriseServices 的 ComponentSerializer.UnmarshalFromBuffer(Byte[] b, Object tp)。ServicedComponent.RemoteDispatchHelper(String s, Boolean& failed) 在 System.EnterpriseServices.ServicedComponent.System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s) 在 System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s) 在 System.EnterpriseServices.RemoteServicedComponent.Invoke(IMessage reqMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at VBServicedComponent.SimpleObject.add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) at TestApp.modMain.Main() in D:\Meridia\MeridiaAPI\COMPlusServices\TestApp \Module1.vb:第 34 行RemoteDispatchNotAutoDone(String s) at System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s) at System.EnterpriseServices.RemoteServicedComponentProxy.Invoke(IMessage reqMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at VBServicedComponent .SimpleObject.add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) 在 D:\Meridia\MeridiaAPI\COMPlusServices\TestApp\Module1.vb:line 34 中的 TestApp.modMain.Main()RemoteDispatchNotAutoDone(String s) at System.EnterpriseServices.IRemoteDispatch.RemoteDispatchNotAutoDone(String s) at System.EnterpriseServices.RemoteServicedComponentProxy.Invoke(IMessage reqMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at VBServicedComponent .SimpleObject.add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) 在 D:\Meridia\MeridiaAPI\COMPlusServices\TestApp\Module1.vb:line 34 中的 TestApp.modMain.Main()add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) 在 D:\Meridia\MeridiaAPI\COMPlusServices\TestApp\Module1.vb:line 34 中的 TestApp.modMain.Main()add_FloatPropertyChanging(FloatPropertyChangingEventHandler obj) 在 D:\Meridia\MeridiaAPI\COMPlusServices\TestApp\Module1.vb:line 34 中的 TestApp.modMain.Main()

内部异常:

堆栈跟踪:

在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblySecurityRef, Evidence assembly , RuntimeAssembly reqAssembly, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean for Introspection) at System.Reflection.Runtime. InternalLoad(String assemblyString, 证据 assemblySecurity,StackCrawlMark& stackMark, Boolean for Introspection) at System.Reflection.Assembly.Load(String assemblyString) at System.Runtime.Serialization.FormatterServices.LoadAssemblyFromString(String assemblyName) at System.Reflection.MemberInfoSerializationHolder..ctor(SerializationInfo info, StreamingContext context)

在处理事件时,我在 TestApp 结束时有什么遗漏吗?如果是,那么处理此类事件的正确方法是什么?

提前致谢。

0 投票
1 回答
67 浏览

.net - ServicedComponent 服务器激活权限被拒绝

我正在尝试在 C# 中开发一个组件,该组件将由 C++ 客户端在进程外调用和使用。为此,我试图将其实现为服务器激活的 ServicedComponent。

该组件如下所示:

该代码编译良好(VS 2017),我可以使用以下方法注册它:

现在,我想看看它是如何工作的。为此,我使用的是旧的、良好的 VB6.0 代码:

在这里我不能让它工作。CreateObject失败,客户端上出现Permission denied错误。如果我切换到激活它工作正常,但我需要让它在进程外,所以server .

在事件日志中,我可以看到以下条目:

特定于应用程序的权限设置不会将具有 CLSID {AA12A3DA-51A2-4F3D-90FF-E7C00E77800D} 和 APPID {3967FB64-686C-4F93-B866-B011FEE9A6AA} 的 COM 服务器应用程序的本地激活权限授予用户 MYDOMAIN\ZUSER SID (S-1-5-21-126838783-1048989290-1062434389-134100) 从地址 LocalHost (Using LRPC) 运行在应用程序容器中的 SID 不可用 (Unavailable)。可以使用组件服务管理工具修改此安全权限。

我在DCOM Config下找不到相应的应用程序{3967FB64-686C-4F93-B866-B011FEE9A6AA}

COM+ Applications下面只有Sample COM app 。但是在那里,我不确定应该改变什么才能使其正常工作。