问题标签 [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.
.net - COM+:ApplicationException 而不是抛出的异常
我有一个调用 COM+ 组件的 ASP.net 网络服务。COM+ 组件中的一个类引发了我要处理的异常。但是 ApplicationException 被 webbservice 捕获,而不是真正的异常。
这是为什么?
编辑:异常详细信息
.net - 如何检测 ServicedComponent 中的事务中止?
我正在尝试创建一个 System.EnterpriseServices.ServicedComponent 以参与分布式事务。我的主要方法如下所示:
我要做的是检测分布式事务是否已中止(或回滚),然后继续回滚我的更改。例如,我可能在磁盘上创建了一个文件,或者做了一些需要撤消的副作用。
我试图处理 SystemTransaction.TransactionCompleted 事件或在 Dispose() 方法中检查 SystemTransaction 的状态但没有成功。
我理解这类似于“补偿”而不是“交易”。
我正在尝试做的事情是否有意义?
c# - 使用来自 ac# .net 的返回值将组件构建为 com+
到目前为止,我在 C# .NET 4 中制作了一个组件并使用 System.EnterpriseServices 使其 COM 可见。我想用 C# 开发业务方法,但我仍然需要从经典的 ASP (vbscript) 访问它们。
到目前为止一切顺利,一切正常(除了函数重载:))。现在我做了一个测试类来获得更多的返回码经验。
然后我只是做了一个简单的 vbscript 文件,用 cscript.exe 运行它来测试 porpuse。
什么工作正常:
当涉及到数组、jaggedarray 或字典时,我得到类型不匹配。VarType 是字典的 13 个对象,例如,但这个字典似乎与 Scripting.Dictionary 不同。
我整天检查 codeproject.com 和 stackoverflow,除了 stackoverflow 上的某个线程之外没有发现任何提示,其中有人提到需要创建 IDispatch 接口。
所以有人遇到过同样的问题并且可以帮助我或给我一些我可以继续的提示吗?
c# - 使 ServicedComponent 以较低的优先级运行
我们有一个ServicedComponent
(COM+ 服务器应用程序)非常占用 CPU。它是从 Windows 服务调用的,完成它所需的时间并不是很重要。
但是,我确实需要它以较低的优先级运行。我怎样才能改变它的优先级?
transactions - 带有 [AutoComplete] 的嵌套组件
假设我有两个ServiceComponent
这样使用的类:
两者都MyComponent1
使用MyComponent2
其[AutoComplete]
方法的属性。
被处置时会MyComponent2
提交还是会等待由 开始的事务MyComponent1
?
.net - 在 GAC 之外的 COM+ 应用程序中注册 .NET 程序集
我开发了一个 .NET 程序集(.NET 4.0,强命名),它公开了两个服务组件。程序集 (dll) 应该托管在 COM+ 应用程序中,并使用 COM+ 属性(程序集和组件级别)进行修饰。例如,装配级属性:
目前(开发原因),我一直在运行以下脚本来创建 COM+ 应用程序并注册程序集(及其所有组件):
上面的批处理文件将根据程序集装饰属性创建(在单次运行中)COM+ 应用程序,在 COM+ 应用程序中注册 MyComPlusAssembly.dll 文件并在其中注册所有 ComVisible 组件,因此在 dcomcnfg 中一切都可见并按预期配置. 此命令还将生成一个全新的 TLB 文件。该程序集是使用 AnyCPU 构建的,因此在 x64 版本的 Windows 上,dllhost.exe 进程将以 64 位运行,而在 x86 版本的 Windows 上,它将以 32 位运行。此外,我的 dll 文件不应该放在 GAC 中(这就是我使用 RegSvcs.exe 命令行实用程序的 /appdir 开关的原因)。使用上述批处理文件安装 COM+ 程序集时,一切正常。
我开始为我的应用程序编写一个 Wix (v3.6) 部署项目,它应该做同样的事情,即:创建 COM+ 应用程序,注册 .NET 程序集和所有 ComVisible 组件。请注意,这一次我依赖于 TLB 文件随安装程序 (*.msi) 一起提供的事实。TLB 由构建过程(VS 2010)生成。为了实现上述目标,我添加了以下 Wix 组件(受 Wix COM+ 扩展文档 - WixComPlusExtension 启发):
MSI 项目构建成功,但安装过程失败,并在尝试注册 dll 后立即回滚。可以在日志中找到以下错误(对于x86和 x64 版本):
上述错误可能表示COM+应用程序中正在注册的dll丢失,即文件不在磁盘上。尽管安装过程很快,但我从未见过将 MyComPlusAssembly.dll 文件复制到磁盘(到 [INSTALLDIR_SERVER]),当安装开始回滚时,所有其他文件都在磁盘上(包括 TLB)。这是时间问题吗?
观察:
- 安装程序的两个版本(x64 和 x86)都会发生这种情况。
- 删除“
<complus:ComPlusAssembly...>
”标签(包括嵌套组件)时,安装成功并创建(空)应用程序,即 - 只有容器”,没有任何程序集或 COM+ 托管组件。 - 我尝试添加第三个“
<Component.../>
”,它创建一个简单的注册表项并将所有“<complus:ComPlusApplication.../>
”代码移至其中。该组件将在所有文件被复制后执行。与上面的日志相同的结果(错误)。
我在这里想念什么?
c# - 如果部分事务失败,则提交事务
我有一个在 COM+ 中运行的方法,它看起来有点像以下:
OK 所以方法运行,DoSomeDBWork() 方法运行,对数据库进行一些更新。
“插入失败”运行,但失败。我只想忽略它,但注销它已失败。
但是我收到了一个错误:System.Transactions.TransactionException:该操作对事务的状态无效。
我假设即使我捕获了异常,因为它是一个数据库错误,它会自动回滚事务。
该错误来自“插入日志...”行
,并且在 DoSomeDBWork() 中更新的所有内容也都被回滚。
如何忽略失败的行?
php - MSSQL UTF8 字符串传递给 ServicedComponent(COM+) 但使用 PHP 显示时输出变为 big5
我将我的数据作为 UTF8 存储在我的 MSSQL 中(我确定它是 UTF8),我使用 Visual Studio 调试工具,我可以看到我的字符串为 UTF8(因为某些字符只在 UTF8 中退出,而不是 big5),但是在我使用之后PHP 通过 IIS fastCGI 显示我的数据,结果是 big5!。
我建立了一个简单的类来测试它。你可以试试。
如果你得到字符而不是 ?? 那么你做对了。但是在我的 PHP 中调用 COM+ 之后,我总是会变大。我尝试了apache,它仍然是一样的。
更新:
PHP 示例代码:
COM+ 安装批处理文件:(install.bat)
如果您想重试,您可以使用它来卸载 tlb 文件或文件被 IIS 或 apache 锁定:
c# - 调用用 [自动完成] 装饰的方法时“值不能为空”
我有一个使用 ClickOnce 技术部署的 Windows 窗体应用程序 (.NET 3.5),大约有 50-100 个并发用户使用。它们都针对外部托管的同一个 MS SQL 数据库 (SQL SERVER 2008 R2)。
应用程序本身使用“包装器”类来执行数据库查询。此类派生自ServicedComponent并使用[AutoComplete]属性装饰其方法。下面是一个例子:
大多数时候,这种方法就像一种魅力。但是当这个方法被调用时,每天会发生很多次异常(当然有类似的方法有这个确切的问题):
如您所见,异常中提到了CTxGreenfee374Processor类中的方法SaveSeason 。据我所知,这是我写的最后一段代码。
我唯一的线索是异常与[AutoComplete]属性和/或派生的ServicedComponent类有关。这个结论是基于我检查了无效的输入参数并且在异常之前没有执行方法内的代码。我假设ServicedComponent类和[AutoComplete]属性在方法块执行之前执行某种逻辑。
由于此异常的偶然发生,我在调试时未能成功重新创建此异常。所以我不得不依赖生产应用程序的日志。
如果有人对这个问题有任何想法,将不胜感激!
com+ - 步入/调试 ServicedComponent
我有ServicedComponent,我已在我的测试代码中将其添加为参考(调试模式),它的pdb文件与dll位于同一文件夹中。
我正在使用 VS 2010。我已经检查了启用非托管代码调试,并在两个项目设置中启用了 Visual Studio 托管进程。这两个项目都是本地的。
我能够但是,当我尝试介入时,它不会介入。它会跳到下一行。
我还需要做什么来调试这个 ServicedComponent?