DTO WEBSERVICE

ALTAIR148 17/07/2013 08:28:13
#426168
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:

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.



KERPLUNK 17/07/2013 08:45:11
#426169
Resposta escolhida
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:

Dim Webreference.DTOCliente cli As new Webreference.DTOCliente
cli.xxx = yyy
cli.aaa = bbb
Webser.TESTE(cli)


ALTAIR148 17/07/2013 09:00:34
#426171
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
KERPLUNK 17/07/2013 09:03:38
#426172
Bem, e você não pode usar diretamente o objeto do WebService? Se não puder, você vai ter que fazer um parser.
ALTAIR148 17/07/2013 09:07:06
#426174
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.
KERPLUNK 17/07/2013 09:15:30
#426175
Um parser, é um método/classe que transforma um objeto em outro, como por exemplo:

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.
ALTAIR148 17/07/2013 09:27:03
#426176
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
KERPLUNK 17/07/2013 09:48:31
#426177
Seu caso e meio complicado então. Já pensou em fazer uso de uma Interface?
ALTAIR148 17/07/2013 09:53:12
#426180
Não sei como fazer. Como seria?
KERPLUNK 17/07/2013 10:02:03
#426182
Você teria uma interface que teria as assinaturas da classe, assim, poderia usar essa interface nas duas classes(na desktop e no webservice)
ALTAIR148 17/07/2013 10:23:06
#426189
Vou dar uma pesquisada aqui, qualquer coisa retorno.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas