none
Erro de conversão de tipos com webservice RRS feed

  • Pergunta

  • Criei um projeto com dois websrvice (1) Acesso, (2) Monitoramento, adicionei uma referência a outro projeto pois o primeiro utiliza a classe usuário do segundo.
    1. No webservice Acesso tem um método que autentica o usuário retornando um objeto "usuário" já autenticado.
    2. No webservice monitoramento tem um método que recebe como parametro um usuário autenticado e executa algumas operações.

    Criei uma aplicação para consumir os webservices e adicionei-os como referência, porém cada referencia parece ter criado seu tipo "Usuario"  e não consigo converter um em outro. Explico.
    Utilizo o webservice acesso para autenticar o usuário e ele retorna um objeto usuario auenticado do tipo "acesso.usuario", se eu tentar utilizar esse tipo como parametro para o metodo do monitoramento dá erro de conversão dizendo que não é possível converter "acesso.usuario" em "monitoramento.usuario"

    tem como resolver sem  editar as referências ou os webservices, tipo com alguma configuração ou comando no código???

    att;

    Deuzinei
    sexta-feira, 8 de agosto de 2008 17:41

Todas as Respostas

  • Isso é normal quando se está usando tudo automático.
    O que acontece é o seguinte:

    Um serviço passa somente um texto em XML dizendo como sua classe foi feita (ou seja, seu nome, as propriedades, etc.).
    A outra ponta (o consumidor) pega estas informações e cria um proxy, ou seja, uma cópia do esqueleto da sua classe para ser utilizada (isso é meio óbvio de acontecer, já que nunca você conseguiria usar uma classe .Net em Java ou VB6, por exemplo).

    Aí acontece do proxy não ser exatamente a mesma classe do seu serviço e, em alguns casos, sequer a mesma classe em duas chamadas distintas.

    Há alternativas para isso, mas existem diversos tipos de serviço (ASMX, WCF, etc), então não vou poder ajudar muito se não souber o que está usando exatamente...

    Seguem alguns links que talvez possam ajudar:

    http://www.west-wind.com/WebLog/posts/9072.aspx
    http://bytes.com/forum/thread376263.html
    http://www.dalepreston.com/Blog/2006/01/returning-classes-from-web-service-in.html

    Note que sempre há a possibilidade de se alterar o proxy manualmente no .Net antigo (1.1, 2.0).
    O proxy é uma classe gerada quando você adiciona uma web reference, portanto, possível de ser alterado manualmente.
    O problema é que uma vez alterado você não poderá mais usar o refresh automático, visto que isso iria sobrepor suas alterações.
    AH, sim... Por acaso são dois serviços separados? Isso acontece mais nestes casos... Aconselho você fazer classes semelhantes serem retornadas no mesmo serviço (ou todos os seus métodos no mesmo serviço, já que há um limite físico de quantos serviços podem ser abertos ao mesmo tempo, especialmente em WCF).
    domingo, 10 de agosto de 2008 17:45