serviço WCF gerado pelo wsdl.exe expor campos particulares em WSDL
Pergunta
Eu estou fazendo algum desenvolvimento wsdl- e cliente pela primeira vez em C # com o WCF (WSDL e cliente já existe, eu estou construindo o lado do servidor,) e eu estou tendo um problema estranho. Eu costumava wsdl.exe para gerar um contrato de minha .WSDL, e eu sou capaz de construir e hospedar o serviço WCF como um serviço do Windows.
No entanto, o wsdl que recebo de http: // localhost / serviço WSDL expõe campos privados em vez de? as propriedades públicas (por exemplo:. em vez de OsType
eu recebo m_OsTypeField
, que é a variável privada associada com a propriedade OsType
pública)
Aqui estão os atributos para uma das classes que têm esse problema:
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://xxxxxxx.com/")]
Estou completamente perplexo, como o serializador XML .NET é suposto ignorar quaisquer membros privados. Todas as ideias sobre por que isso pode estar acontecendo?
Solução
Se você estiver usando WCF, você não deve estar usando wsdl.exe
mas svcutil.exe
vez.
Além disso, o serializador WCF DataContract padrão será nada feliz serialize você marcou com um atributo [DataMember] -. A configuração de visibilidade .NET tem qualquer influência sobre a visão SOA de seus dados, realmente
No entanto, a partir de sua amostra de código parece como se você estiver usando o XML Serializer e não o DataContractSerializer -. Provavelmente porque você usou wsdl.exe vez de svcutil.exe
Você pode tentar criar os topos lado do servidor usando svcutil.exe? Você ainda vê o mesmo problema?
Marc
Outras dicas
Seus DataContracts estiver usando o motor XmlSerializer mas seu OperationContract está usando DataContractSerializer.
Aplique o XmlSerializerFormatAttribute no contrato de operação
De MSDN http://msdn.microsoft .com / en-us / library / ms732038 (v = VS.90) .aspx
Ocasionalmente, o DataContractSerializer não é suficiente para serializar os tipos. WCF suporta um mecanismo de serialização alternativa, o XmlSerializer, que você também pode usar para serializar parâmetros. O XmlSerializer permite que você use mais controle sobre o XML resultante utilizando atributos como a XmlAttributeAttribute. Para mudar para usando o XmlSerializer para uma determinada operação ou para todo o serviço, aplicar o atributo XmlSerializerFormatAttribute para uma operação ou um serviço. Por exemplo:
[ServiceContract]
public interface IAirfareQuoteService
{
[OperationContract]
[XmlSerializerFormat]
float GetAirfare(Itinerary itinerary, DateTime date);
}
Para obter mais informações, consulte Usando a classe XmlSerializer. Lembre-se que a mudança manualmente para o XmlSerializer como mostrado aqui não é recomendado a menos que tenha razões específicas para fazê-lo, conforme detalhado no tópico.