我必须采用一些预定义的 WSDL(我不控制这些),并在我们的设备上公开它们以回复各种 SOAP/UPnP 请求。
无论如何,我已经完成了所有这些工作,但是问题出现了,因为我有一项可以在任意数量的频道上请求的服务。我会解释:
[System.ServiceModel.ServiceContractAttribute(Namespace="urn:some:namespace:1", ConfigurationName="myInterface")]
public interface myInterface
{
[System.ServiceModel.OperationContractAttribute(Action="urn:some:namespace:1#GetConfiguration", ReplyAction="*")]
[System.ServiceModel.XmlSerializerFormatAttribute()]
[return: System.ServiceModel.MessageParameterAttribute(Name="config")]
MyConfigurationResponse GetConfiguration(MyConfigurationRequest request);
}
基本上,我正在尝试做的是(我意识到这种语法完全错误,但我认为它会明白这一点)是这样的:
[System.ServiceModel.ServiceContractAttribute(Namespace="urn:some:namespace:{channelNumber}", ConfigurationName="myInterface")]
public interface myInterface
{
[System.ServiceModel.OperationContractAttribute(Action="urn:some:namespace:{channelNumber}#GetConfiguration", ReplyAction="*")]
[System.ServiceModel.XmlSerializerFormatAttribute()]
[return: System.ServiceModel.MessageParameterAttribute(Name="config")]
MyConfigurationResponse GetConfiguration(MyConfigurationRequest request, String channelNumber);
}
我只是想将原始 Action 消息的某些部分作为参数传递给我正在实现的方法。
我想到的唯一可以实现它的方法是指定其他方法,我们将其称为 Dispatcher 并使用 Action="*",然后使用OperationContext.Current.IncomingMessageHeaders.Action
. 这似乎是一种非常阴暗的做事方式。我确信这里的主要障碍是我对 WCF 缺乏经验。
您能提供的任何帮助将不胜感激。
谢谢,