我实现了一种操作行为,它在自定义SOAP消息头中读取/写入一些超出范围的信息。通过在行为类中实现IWsdlExportExtension
,我还想改变Web服务的WSDL描述,以便重新定义这些自定义。
public class BulkOperationAttribute : Attribute, IOperationBehavior, IWsdlExportExtension
{
// ...
public void ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)
{
// _OperationDescription has been remembered in ApplyDispatchBehavior...
foreach ( MessageDescription operationMessage in _OperationDescription.Messages )
{
if ( operationMessage.Direction == MessageDirection.Input )
BulkOperationMessageExtension.AddRequestMessageHeaderDescription(operationMessage.Headers);
else
BulkOperationMessageExtension.AddResponseMessageHeaderDescription(operationMessage.Headers);
// this extension methods creates a MessageHeaderDescription instance and adds it to the header collection...
}
}
}
我的问题是生成的WSDL不包含信息。
有趣的是,当我将WSDL生成代码移动到合同行为类时,它按预期工作。不幸的是,这非常麻烦 - 每次我在操作级别使用[BulkOperation]
时,我都需要修饰服务合同。
该问题简要提及here,但没有任何更深入的解释。
我的问题:您是否知道在操作行为级别生成自定义标头WSDL的任何解决方法?