C# 将runtimeknown属性添加到Castle Windsor中WcfFacility创建的wcf代理
我正试图创建客户端代理使用温莎城堡优秀的wcf设施。但是,在使用该工具添加自定义属性时,我需要访问OperationContextScope。我的方法在运行时失败,出现以下错误:传递给OperationContext的IContextChannel无效。必须是服务器调度通道或客户端代理通道。当代码进入using块时会发生这种情况,如下所示。任何关于如何使这项工作的建议都将不胜感激 容器设置:C# 将runtimeknown属性添加到Castle Windsor中WcfFacility创建的wcf代理,c#,wcf,castle-windsor,wcffacility,C#,Wcf,Castle Windsor,Wcffacility,我正试图创建客户端代理使用温莎城堡优秀的wcf设施。但是,在使用该工具添加自定义属性时,我需要访问OperationContextScope。我的方法在运行时失败,出现以下错误:传递给OperationContext的IContextChannel无效。必须是服务器调度通道或客户端代理通道。当代码进入using块时会发生这种情况,如下所示。任何关于如何使这项工作的建议都将不胜感激 容器设置: public class WcfClientInstaller : IWindsorInstaller
public class WcfClientInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.AddFacility<WcfFacility>();
container.Register(Component.For<IMyInterface>().AsWcfClient(new DefaultClientModel
{
Endpoint = WcfEndpoint.FromConfiguration("MyEndpoint"),
}).LifestyleTransient());
}
}
调用代理:
[Test]
public void Test()
{
var container = new WindsorContainer();
container.Install(new WcfClientInstaller());
var proxy = container.Resolve<IMyInterface>();
// Crashes here
using (new OperationContextScope((IContextChannel)proxy))
{
var bmp = new BrokeredMessageProperty { CorrelationId = "someNonStaticId" };
OperationContext.Current.OutgoingMessageProperties.Add(BrokeredMessageProperty.Name, bmp);
}
}
试着在IWCFDolicy实现中这样做,如下所示:Hi Phil。谢谢你的反馈!在您提供的示例中,他们正在使用wcfpolicy添加静态值。但是,我只有在收到消息时才知道该值。是否可以以某种方式将此值传递给策略?是否接收消息?那么这是某种路由器吗?不是真的,它是一种WCF服务,它从azure service bus接收消息,对数据进行一些处理,然后使用WCF将结果发布到主题。我不熟悉service bus,也不熟悉是否存在一些环境上下文,您可以从中提取一些类似于非静态ID的WCF操作上下文。然而,创建您自己的基于线程的上下文,在其中存储一个值,然后您的IWcfPolicy可以提取该值,这将是相对简单的。