DTO WEBSERVICE
Bom dia,
Pessoal, estou quebrando a cabeça aqui há dias e não consigo achar uma solução pro meu caso.
Eu estou montando um sistema desktop e ele fará o acesso aos dados através de um webservice que também estou montando, só que eu não consigo passar os valores da DTO do desktop para a DTO do webservice. Abaixo um método do webservice:
Ai no desktop estou colocando como na imagem abaixo, mas como pode-se observar na imagem não dá certo.
Pessoal, estou quebrando a cabeça aqui há dias e não consigo achar uma solução pro meu caso.
Eu estou montando um sistema desktop e ele fará o acesso aos dados através de um webservice que também estou montando, só que eu não consigo passar os valores da DTO do desktop para a DTO do webservice. Abaixo um método do webservice:
Imports DTO
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
[ô] To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[ô] <System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:=[Ô]http://tempuri.org/[Ô])> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class Service1
Inherits System.Web.Services.WebService
Dim DTOCliente As New DTOCliente
<WebMethod()> _
Public Function TESTE(ByVal Cl As DTOCliente) As DataSet
Return ListaClientes
End Function
End Class
Ai no desktop estou colocando como na imagem abaixo, mas como pode-se observar na imagem não dá certo.
Bem, primeiro temos que entender um conceito importante: WebService.
Webservice é mais ou menos como uma DLL que fica remota. Ele tem seus objetos e métodos para serem usados.
O seu caso, é que você está tentando passar como parâmetro para esse método, um objeto que não é um dos do WebService. Experimente:
Webservice é mais ou menos como uma DLL que fica remota. Ele tem seus objetos e métodos para serem usados.
O seu caso, é que você está tentando passar como parâmetro para esse método, um objeto que não é um dos do WebService. Experimente:
Dim Webreference.DTOCliente cli As new Webreference.DTOCliente
cli.xxx = yyy
cli.aaa = bbb
Webser.TESTE(cli)
Peço desculpas, esqueci de colocar o detalhe que dessa forma ai eu até tinha conseguido, o problema é que eu tenho a DTOCliente no desktop também, e essa DTOCliente ela vai levar os valores para uma classe de validação, após a validação ai sim iria passar pro webservice, eu até podia passar o valor pra DTOCliente no desktop e depois da validaçao passar pro DTOCliente do webservice +/- assim:
Dim DTODesktop as new DTOCliente
Dim cli As WebReference.DTOCliente = New WebReference.DTOCliente
cli.Cliente_ID = DTODesktop .Cliente_ID
Mas daà seria dois trabalhos, uma vez para passar o valor dos campos para o DTODesktop e depois passar esse valor para a DTO do webserice eu queria algo do tipo
[c]cli= DTODesktop
Bem, e você não pode usar diretamente o objeto do WebService? Se não puder, você vai ter que fazer um parser.
Citação:Bem, e você não pode usar diretamente o objeto do WebService?
Não queria pelo seguinte, o Desktop terá algumas camadas e eu quero deixar o webservice visÃvel em apenas uma. Como seria esse parser? Se puder me dar só algum termo para pesquisa daà eu procuro aqui.
Um parser, é um método/classe que transforma um objeto em outro, como por exemplo:
Nesse caso, o seu método parser recebe a variável do desktop e retorna a variável do webservice com todos os parâmetros necessários. Para fazer um parser, tem várias maneiras. Pode ser um método de extensão, pode ser uma classe especÃfica para métodos parser(como a classe Convert).
Uma solução menos ortodoxa, seria fazer o webservice ter um método que recebe [Ô]object[Ô] ou uma classe que herde de object e passar para esse método a sua classe desktop.
Outra solução seria criar no webservice um método que ao invés de receber o objeto, receba vários parâmetros, cada um equivalendo à uma propriedade da sua classe desktop.
string x = [Ô]123[Ô];
Int32 y = Convert.ToInt32(x);
Nesse caso, o seu método parser recebe a variável do desktop e retorna a variável do webservice com todos os parâmetros necessários. Para fazer um parser, tem várias maneiras. Pode ser um método de extensão, pode ser uma classe especÃfica para métodos parser(como a classe Convert).
Uma solução menos ortodoxa, seria fazer o webservice ter um método que recebe [Ô]object[Ô] ou uma classe que herde de object e passar para esse método a sua classe desktop.
Outra solução seria criar no webservice um método que ao invés de receber o objeto, receba vários parâmetros, cada um equivalendo à uma propriedade da sua classe desktop.
Citação:Uma solução menos ortodoxa, seria fazer o webservice ter um método que recebe [Ô]object[Ô] ou uma classe que herde de object e passar para esse método a sua classe desktop.
Isso foi o que havia pensado, mas não consegui chegar em uma lógica.
Citação:Outra solução seria criar no webservice um método que ao invés de receber o objeto, receba vários parâmetros, cada um equivalendo à uma propriedade da sua classe desktop.
Acredito que dessa forma dê muito trabalho
Seu caso e meio complicado então. Já pensou em fazer uso de uma Interface?
Não sei como fazer. Como seria?
Você teria uma interface que teria as assinaturas da classe, assim, poderia usar essa interface nas duas classes(na desktop e no webservice)
Vou dar uma pesquisada aqui, qualquer coisa retorno.
Tópico encerrado , respostas não são mais permitidas