通过定义一个实现IContactBehavior和IWsdlExportExtension和设置您的服务合同上属性的属性,你可以轻松地添加SOAP头到您的WSDL(见http://wcfextras.codeplex.com/了解更多信息)WCF WSDL SOAP消息头的所有操作
但是现在我需要在所有OperationContracts的wsdl中设置一个Soap Header合约,这次我不能设置属性。
下面的代码(从IWsdlExportExtension.ExportEndPoint调用)不起作用,但是从SoapHeaderAttributes(执行的IWsdlExportExtension.ExportContract)
foreach (OperationDescription operationDescription in context.ContractConversionContext.Contract.Operations)
{
AddSoapHeader(operationDescription, "SomeHeaderObject", typeof(SomeHeaderObject), SoapHeaderDirection.InOut);
}
internal static void AddSoapHeader(OperationDescription operationDescription, string name, Type type, SoapHeaderDirection direction)
{
MessageHeaderDescription header = GetMessageHeader(name, type);
bool input = ((direction & SoapHeaderDirection.In) == SoapHeaderDirection.In);
bool output = ((direction & SoapHeaderDirection.Out) == SoapHeaderDirection.Out);
foreach (MessageDescription msgDescription in operationDescription.Messages)
{
if ((msgDescription.Direction == MessageDirection.Input && input) ||
(msgDescription.Direction == MessageDirection.Output && output))
msgDescription.Headers.Add(header);
}
}
internal static MessageHeaderDescription GetMessageHeader(string name, Type type)
{
string headerNamespace = SoapHeaderHelper.GetNamespace(type);
MessageHeaderDescription messageHeaderDescription = new MessageHeaderDescription(name, headerNamespace);
messageHeaderDescription.Type = type;
return messageHeaderDescription;
}
任何人有一个想法如何使用这个代码调用时不工作在所有的操作(不使用属性),并通过这样做,将标题的合同添加到wsdl?
我实际上指出WCFExtras我自己,但我无法找到如何添加肥皂头到t他在没有设置属性的情况下执行所有操作。 – Linefeed 2009-06-12 14:12:55