首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WCF Operation.Context不是线程安全的?

WCF Operation.Context不是线程安全的?
EN

Stack Overflow用户
提问于 2013-10-10 17:34:55
回答 1查看 3.6K关注 0票数 17

我正在对WCF服务进行代码审查。在每条消息的头中,我们注入服务稍后将用来构建到DB的连接字符串的数据。这是因为该服务将由许多不同的站点使用,每个站点都有自己的数据库,该服务必须查询这些数据库。我们使用wcf可扩展性。我们有一个自定义的MessageInspector,在收到请求后,从消息头中提取数据,创建上下文(实现IExtension)并将其添加到OperationContext.Current.Extensions中。在发送回复之前,将从Extencions集合中删除自定义上下文。

这是一个相当常见的模式,如下所述:

Where to store data for current WCF call? Is ThreadStatic safe?

还有这里:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/319cac66-66e8-4dfe-9a82-dfd289c9df1f/wcf-doesnt-have-session-storage-so-where-should-one-store-call-specific-data?forum=wcf

只要服务接收请求、处理请求、发送应答并接收下一个请求,所有这些都可以很好地工作。但是,如果服务收到一个请求,并且在能够回复之前收到第二个请求,该怎么办呢?我构建了一个小的控制台应用程序来测试它。我从两个不同的线程发送了两条消息,我让wcf服务等待了2秒,以确保第二个请求在第一个请求完成之前到达,这是我得到的结果:

站点Id: uuid:2caf47cf-7d46-4d72-9275-d9c037fa0e70;id=2;会话: test1450 :线程Id :6

站点Id: uuid:2caf47cf-7d46-4d72-9275-d9c037fa0e70;id=3;会话: test1450 :线程Id : 22

看起来wcf创建了两个在两个不同线程上执行的会话,但站点Id是相同的。不应该。从这个角度看,OperationContext.Current.Extensions看起来像是一个线程间共享的集合。现在我倾向于认为我的测试是错误的,我遗漏了一些东西。

有没有人试过类似的东西,发现OperationContext.Current不是线程安全的?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19292135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档