我在IIS上使用ASP.NET兼容模式托管了WCF服务。
问题是我检查了在Global.asax中处理的HTTP请求的线程与执行服务操作的线程不同。
如何在HTTP请求的同一个线程中调用服务操作?
提前谢谢。
更新
根本问题是我在使用HTTP模块以便在请求期间使某些对象可用,并且当要发送响应时,这些对象将被释放/释放。
由于其中一些对象存储在线程静态字段中,因此无法在WCF服务操作中共享它们。
也许还有另一种方法。例如,在调用某些WCF服务操作之前执行某些操作,并在此之后结束。我会感激任何建议。
答案 0 :(得分:2)
在线程变量中存储任何内容都是一个坏主意,因为没有直接控制运行时管理IIS管道和IIS中的WCF主机管道之间的线程的方式。
您是否可以使用Items
容器?在ASP.NET兼容模式下,容器将在整个请求管道中可用。这样,您可以轻松地在那里存储/检索一些数据,而不必担心资源消耗,因为容器将在管道末端自动销毁。
答案 1 :(得分:1)
如果可能,我强烈建议将HTTPModule中的逻辑移动到由WCF服务调用执行的代码中。我们为每个服务调用执行并提供了通用功能和验证,为了支持这一点,我们要求开发人员在每次服务调用开始时调用一个通用的方法。
由于额外的代码,这不像HTTPModule解决方案那么优雅,但通过这样做,我们最终得到了一个包含着名设置和拆卸点的每个服务调用的一个很好的工作单元。