当您创建Web服务时,Microsofts的WCF很容易使用,其中每个消息都有自己的Web方法。 WCF生成所有WSDL,一切都很简单。
我想要做的是有一个接受多个不同消息的Web方法(我不想在每次添加新消息类型时添加一个新方法)。消息本身将具有标识消息类型的标头信息。一旦我知道了消息类型,我就会知道消息其余部分的结构。
我发现使用WCF执行此操作的唯一方法是让方法接受一个字符串,我将其解析为XML并使用。但是,我看不到在WSDL中发布各种消息类型的明确方法;所以,整个服务基本上没有文件记录。
有人知道在WCF中使用的技术吗?
答案 0 :(得分:2)
您可以通过将Action设置为*并使其接收Message对象来编写接受任何消息的操作合同:
[ServiceContract]
public interface IMessageContract
{
[OperationContract(Action = "*", ReplyAction = "*")]
Message ProcessRequest(Message request);
}
Message对象允许您访问标题,并具有反序列化正文的方法。
要导出您自己的WSDL,您需要对合同行为或操作行为实施IWsdlExportExtension并将其附加到您的服务。这将允许您访问WsdlExporter,您可以自己创建ContractDescription并调用ExportContract使其出现在生成的WSDL中。