【发布时间】:2013-03-03 02:35:13
【问题描述】:
在我的工作场所,我们正在升级我们的考勤设置。目前,我们有员工用来办理入住和退房的实体终端。这些终端通过 Web 服务调用与第 3 方 T&A 系统进行通信。
关于 T&A 网络服务:
- 托管在 IIS 6 上
- 通过 HTTP 使用 WCF 进行通信
- 我们只对其中一种公开的方法感兴趣(我们称之为 Beep())
我需要做什么:
- 保留原来的 T&A 系统,原封不动
- 编写一个自定义服务,也响应对 Beep() 的调用
因此,基本上,我需要搭载对 Beep() 的所有调用,但我不确定最好的方法是什么。
已经考虑过的:
- 编写一个自定义 Web 服务,该服务实现与 T&A 服务完全相同的合同,并将所有终端定向到该自定义服务。我的想法是我可以从我的自定义服务中调用原始 T&A 服务,以及应用所需的任何其他逻辑。
- 这对我来说似乎太过分了,而且似乎有不必要的风险。我们希望尽可能不修改原始系统。
- 编写自定义 HTTP 处理程序来拦截对原始 T&A 服务的调用。
- 我们实际上已经在内部做过类似的事情,但我们的实现采用原始 HttpRequest,提取内容,调用自定义服务,最后基于原始请求创建一个 new HttpRequest以便进行对 Beep() 的原始 Web 服务调用。
- 我不喜欢这种方法的地方是原始的 HttpRequest 丢失了。是的,创建了第二个据称相同的请求,但我对 HttpRequests 的了解还不够,无法保证这是安全的。
我更喜欢选项 2,但它仍然不完美。理想情况下,我们不需要销毁原始的 HttpRequest。有谁知道这是否可能?
如果没有,任何人都可以提出另一种方法吗?是否可以将 IIS 配置为将请求分叉到两个目标?
谢谢
更新 #1
我找到了解决方案(记录在 here),但我仍然愿意接受其他选择。
更新 #2
我喜欢 Flup 的解决方案(和理由)。他得到了赏金:) 谢谢你!
【问题讨论】:
-
您尝试做的事情的基础听起来有点像“中间人”,但您不想绕过所有信息,我是对的吗?如果 beep() 被调用,也许你可以注册到响应的东西
-
那么,当我找到自己的解决方案后,我该如何处理赏金?
-
也许创建一个答案就足够了,将其标记为答案并将赏金设置为您自己:)
标签: asp.net wcf iis integration httphandler