【发布时间】:2016-03-15 14:55:31
【问题描述】:
我刚搬到一个使用大量 Service Broker 功能的代码库。
我的 EAService.config 设置如下
<ApplicationService name="NotificationTest" enabled="true">
<OnNotification>
<ServerName>MyServer\MyInstance</ServerName>
<DatabaseName>MyDatabase</DatabaseName>
<SchemaName>dbo</SchemaName>
<QueueName>MyQueueName</QueueName>
</OnNotification>
<LaunchInfo>
<ImagePath>C:\SomeFolder\SomeConsoleApp.exe</ImagePath>
<CmdLineArgs>myCommandLineArg1</CmdLineArgs>
<WorkDir>C:\SomeFolder\</WorkDir>
</LaunchInfo>
<Concurrency min="1" max="1" />
</ApplicationService>
当我尝试调试上述代码时,我的问题就出现了。
由于 Service Broker 外部激活器 (C:\Program Files\Service Broker\External Activator\Bin\ssbeas.exe) 正在实例化代码....这不是我可以运行的东西(据我所知)在“调试模式”中等待调用进入并设置断点。
比如有个WEBAPI的项目,我可以做传统的Start/Debug,在ApiController/Method上下断点,当有请求进来的时候,会在断点上断,我可以接从那里调试。
使用 Service Broker,它正在实例化一些 .exe....而 .exe 可能会如此快速地打开和关闭,我无法“搜索和查找”以将调试器附加到它。
我还想,“也许我会让 Service Broker 向 WCF 服务发送消息”,但根据我在这篇 SOF 帖子中读到的内容,这看起来不太可能实现或非常麻烦:
Service Broker and WCF interoperability
我是否可以在 EAService.config 中进行上述设置并让调试器中断,如下图所示?
或者有没有人想出一种非 hacky 的方法来调试由 Service Broker “激活”的 C# 代码?
【问题讨论】:
-
在这种情况下,我总是走“老派”,我用许多写入日志的“跟踪”语句来检测代码。它是核心且缓慢的,但它确实有效。不过需要大量的耐心和毅力。
-
老派。这就是我害怕的。 javascript:alert("stinkFactorValue=" + stinkFactor);
-
这是一种精通的好技术,因为它几乎是唯一适用于几乎所有条件和环境的技术。
标签: c# sql-server visual-studio sql-server-2012 service-broker