我正在根据http://www.codeproject.com/KB/WCF/WSI18N.aspx和其他一些文章在我的WCF应用程序中实现本地化。基本上我在客户端(使用IClientMessageInspector实现)附加一个带有当前文化信息的消息头,然后在服务器端的当前线程上应用文化信息(使用ICallContextInitializer实现)。我目前面临的探索是我的ICallContextInitializer的实现可能不是根据消息头实际更改Thread.CurrentThread.CurrentCulture的最佳位置,因为在AfterInvoke()中重置线程的文化发生在其他应该仍然存在的事情之前在本地化的背景下。目前我对IErrorHandler实现有问题 - 它是在ICallContextInitializer.AfterInvoke()之后调用的,所以线程已经重置回默认文化,因此我无法使用IErrorHandler中的本地化资源。
是否有比ICallContextInitializer更好的扩展位置我可以用于基于邮件头的本地化?或者更好 - 是否有任何文章描述WCF中的执行顺序?我想了解处理不同扩展点的顺序......
问题已解决,但我想获得有关WCF内部执行顺序等的更多信息 - 有关此主题的内容有哪些提示?
答案 0 :(得分:4)
调度程序行为的确切方式并未真正记录在案(就像在WCF中一样)。就个人而言,我会尝试使用IDispatchMessageInspector,因为它也会在生成错误消息并运行回用户后运行,可能更可能允许您的IErrorHandler在正确的背景下运行
答案 1 :(得分:1)
要了解wcf处理中的顺序,请参阅The basics of the WCF stack以及更详细的Extending WCF’s Client and Dispatcher Runtimes