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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top