WCF WSDL Soap Header em todas as operações
Ao definir um atributo que implementa IContactBehavior e IWsdlExportExtension e definir esse atributo em seu contrato de serviço, você pode adicionar facilmenteabeçalhos @Soap para o seu wsdl (Vejohttp: //wcfextras.codeplex.com Para maiores informações
Mas agora eu preciso definir um contrato de cabeçalho de sabão no wsdl em todos os contratos de operação e, desta vez, não consigo definir um atribut
código a seguir (chamado de IWsdlExportExtension.ExportEndPoint) não funciona, mas funciona quando chamado a partir do SoapHeaderAttributes (que executa um 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;
}
Alguém tem uma idéia de como aplicar esse código em todas as operações (sem usar atributos) e, fazendo isso, adicionando o contrato do cabeçalho ao wsd