C#:Webservice altera o tipo de parâmetro esperado (de um POCO normal para uma classe gerada automaticamente)

StackOverflow https://stackoverflow.com/questions/738994

Pergunta

Tenho a seguinte classe na Biblioteca de Classes: Artist, que é um POCO

Agora eu tenho um método em um serviço web (que tem uma referência à biblioteca mencionada acima) com uma assinatura como esta:

[WebMethod]
public int Artist_AddArtist(Artist a) {
 //
}

Quando tento consumir este serviço de uma aplicação (que também possui uma referência à biblioteca de classes mencionada acima), o parâmetro esperado do Artist_AddArtist método não é Artist, mas um novo tipo de Artist que está sendo gerado em Reference.cs que é uma classe parcial gerada automaticamente.

Assim como na minha aplicação eu uso, supostamente o mesmo Artist classe da biblioteca e agora o método Web Service espera esse novo tipo gerado automaticamente, não consigo passar uma instância dele para o serviço web.

Como posso corrigir esse problema?

Foi útil?

Solução

Talvez mudar para serviços WCF seja uma opção para você. Até onde me lembro, com um serviço WCF, você pode reutilizar os mesmos tipos no servidor e no lado do cliente.

Este artigo Explica como migrar um serviço da Web ASMX para um serviço WCF.

Outras dicas

Você não pode e não deve resolver o problema.

Alguns outros lhe dirão para fazer coisas como editar o arquivo gerado, mas isso não é uma boa prática (já que as alterações desaparecerão assim que a Referência da Web for atualizada).

O que você está vendo é intencional.Ver Fundamentos:Como funcionam os serviços da Web.

Resumidamente, quando você usa "Adicionar referência da Web", o Visual Studio baixa o arquivo WSDL do serviço e usa os esquemas XML do WSDL para criar algumas classes de proxy para representar o XML descrito pelo esquema.Também cria uma classe proxy para o próprio serviço, possuindo métodos para cada operação no serviço.

As classes de dados proxy podem ser serializadas para o XML que o serviço espera receber e podem ser desserializadas de volta a partir do XML que o servidor envia em resposta.

Uma maneira de pensar nisso é que você só tem esse problema porque o cliente e o serviço são .NET.Se o seu cliente fosse escrito em Java, você não pensaria em compartilhar classes.


Observe que o WCF pode fazer isso, se necessário.Introduz uma dependência entre o cliente e o serviço (ambos devem utilizar versões compatíveis do assembly que contém as classes), mas quando for necessário, a opção está aí.É útil quando há comportamento nessas classes que deve ser utilizado tanto pelo cliente quanto pelo serviço.

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