WCF如何决定调度哪个操作?

时间:2011-03-11 13:38:02

标签: wcf soap wsdl

我正在构建一个WCF SOAP应用程序。 WSDL文件有许多操作,其中许多操作具有相同的参数类型。 WSDL文件将所有soapAction属性定义为“''”。当我尝试启动这样的服务时,WCF会抛出一个异常,说soapActions必须是唯一的。

经过一些谷歌搜索后,我比以前更加困惑。我使用SOAPUI创建了一个带有两个操作的模拟服务,这两个操作采用相同的输入类型,并且没有定义soapActions,它总是选择相同的操作。定义操作后,它可以正常工作。

我的问题是:

  • 您是否可以在没有唯一soapActions的情况下创建WCF SOAP服务(实际上保留了原始WSDL中定义的soapActions“''”)?
  • 如果没有定义soapAction,服务如何选择正确的操作?

编辑: 我无法控制WSDL。我正在使用WSCF.Blue工具从WSDL文件创建服务存根。我可能能够修改WSDL,但我想看看是否有可能保留它。

1 个答案:

答案 0 :(得分:2)

从你的问题不是很清楚,但我建议你基于一些定义的WSDL构建服务,不是吗?默认情况下,WCF使用SOAP操作,因为它是WCF服务使用BasicHttpBinding提供的WS-I Basic Profile 1.1的一部分。当动作由root body元素定义时,将使用具有空SOAP动作的WSDL。

WCF示例提供了custom DispatchOperationSelector的示例,它能够通过其根体元素将消息路由到操作。这可能是您需要添加到服务中的内容,以便基于提供的WSDL的客户端可以调用它。