接受不同消息类型的WCF Web方法

时间:2010-07-02 13:54:36

标签: wcf web-services wsdl messaging

当您创建Web服务时,Microsofts的WCF很容易使用,其中每个消息都有自己的Web方法。 WCF生成所有WSDL,一切都很简单。

我想要做的是有一个接受多个不同消息的Web方法(我不想在每次添加新消息类型时添加一个新方法)。消息本身将具有标识消息类型的标头信息。一旦我知道了消息类型,我就会知道消息其余部分的结构。

我发现使用WCF执行此操作的唯一方法是让方法接受一个字符串,我将其解析为XML并使用。但是,我看不到在WSDL中发布各种消息类型的明确方法;所以,整个服务基本上没有文件记录。

有人知道在WCF中使用的技术吗?

1 个答案:

答案 0 :(得分:2)

您可以通过将Action设置为*并使其接收Message对象来编写接受任何消息的操作合同:

[ServiceContract]
public interface IMessageContract
{
    [OperationContract(Action = "*", ReplyAction = "*")]
    Message ProcessRequest(Message request);
}

Message对象允许您访问标题,并具有反序列化正文的方法。

要导出您自己的WSDL,您需要对合同行为或操作行为实施IWsdlExportExtension并将其附加到您的服务。这将允许您访问WsdlExporter,您可以自己创建ContractDescription并调用ExportContract使其出现在生成的WSDL中。

相关问题