none
VB6 Passar parâmetro para Web Service C# RRS feed

  • Pergunta

  • Prezados.

    Como eu faço para que meu Projeto em VB6 conseguir passar um parâmetro Collection para uma Web Service C#?

    Não vejo exemplo na Internet com Tipo Collection, estou usando WEB API.

    Abs e gradeço a ajuda.

    quinta-feira, 21 de janeiro de 2016 13:40

Respostas

  • Diretamente não tem como Ricardo Soares Nogueira, precisa de uma tradução. 

    Tente assim:

    [
    	{"FirstName":"Joao", "LastName":"Fulano", "Student_ID":1}, 
    	{"FirstName":"Ricardo", "LastName":"Soares", "Student_ID":2}
    ]

    Esse é o formato JSON que o WebApi entende, então crie uma variável json e coloque esse contéudo fixamente só para testar e mude seu 

    objXmlHttp.setRequestHeader "Content-Type", "application/json; charset=utf-8"

    objXmlHttp.send json

    Ou seja, o trabalho no caso do VB6 é braçal não dá pra enviar o objeto e o mesmo automáticamente ser serializado, tem que construir uma rotina para isso. (Exemplo: http://www.codelines.com/serial.htm)

    Faça esse teste e mande um post em vez de put por enquanto e ve se chega no WebApi o que deseja!

    Eu também não sei como você está formatado seu WebApi dependendo ele precisa saber o jeito que chega também!

    Um exemplo:

    Eu fiz um PHP enviando para Web Api .NET

    Código Exemplo:

    PHP

    <?php
    
    $ch = curl_init();
    
    $headers = array('Accept: application/json','Content-Type: application/json'); 
    
    $url = 'http://localhost:61498/api/Carros';
    
    $fields = array(array("Id" => 1, "Description" => "Comodoro"), array("Id" => 2, "Description" => "Fusca"));
    
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch,CURLOPT_POST, true);
    curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($fields));
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    
    
    $result = curl_exec($ch);
    
    curl_close($ch);
    
    echo 'Item executado com êxito ...';

    WebApi Methodo

    [HttpPost]
    public void Post([FromBody]Carro[] value)
    {
    	var itens = Request.Body;
    	var c = value;
    }

    Resultado:

    Ou seja, o dado foi formato JSON, foi serializado pelo PHP e enviado com Header Json, pronto satisfez a obrigação imposta pelo WebApi e seu decorador (FromBody, apesar que existem outras formas de ele resgatar como FromForm, etc ...)


    Só ratificando, não existe nada pronto em VB6 por ser muito antigo e descontinuado para essas novas features que utilizamos hoje em dia!


    Fulvio C



    quinta-feira, 21 de janeiro de 2016 18:57

Todas as Respostas

  • Instale o Soap Type Library v3.0 igual na primeira essa figura:

    http://www.codeproject.com/Articles/242475/Consuming-a-Web-Service-NET-with-VB-App

    Fonte: http://www.codeproject.com/Articles/242475/Consuming-a-Web-Service-NET-with-VB-App

    Depois utilize esse código:

    Dim sUrl As String
    Dim response As String
    Dim xmlhttp
    
    Set sUrl = "http://my.domain.com/service/operation/param"
    
    Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open "POST", sURL, False
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xmlhttp.send()
    
    Dim response As String = xmlhttp.responseText
    
    Set xmlhttp = Nothing
     

    Fonte: Get/post to RESTful web service

    Aonde está param: você passe os itens que deveram conter no json tipo:

    {
    	Id: 1,
    	Name: Exemplo
    }

    para: 

    Set sUrl = "http://my.domain.com/service/operation?Id=1&Name=Exemplo"
    Código final com paramentro nesse exemplo
    Dim sUrl As String
    Dim response As String
    Dim xmlhttp
    
    Set sUrl = "http://my.domain.com/service/operation?Id=1&Name=Exemplo"
    
    Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    xmlhttp.open "POST", sURL, False
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xmlhttp.send()
    
    Dim response As String = xmlhttp.responseText
    
    Set xmlhttp = Nothing



    Fulvio C


    • Editado Fulvio Cezar Canducci Dias quinta-feira, 21 de janeiro de 2016 14:08
    • Sugerido como Resposta Marcos SJ quinta-feira, 21 de janeiro de 2016 16:22
    • Não Sugerido como Resposta Marcos SJ quinta-feira, 21 de janeiro de 2016 17:01
    quinta-feira, 21 de janeiro de 2016 14:07
  • Fulvio obrigado pela atenção.

    Mas a minha situação é no seguinte código:

    Uma lista de Objetos da Classe Student que eu adiciono em uma lista do tipo Collection

    Dim strName As String


    Dim listaDeObjetos As New Collection
    Dim studentDados As New Student
    Set studentDados = New Student

    studentDados.FirstName = "joao"
    studentDados.LastName = "fulano"
    studentDados.Student_ID = 1

    listaDeObjetos.Add studentDados

    Set studentDados = New Student
    studentDados.FirstName = "ricardo"
    studentDados.LastName = "soares"
    studentDados.Student_ID = 2

    listaDeObjetos.Add studentDados

    Abaixo a chamada da Web Service

    Set objDom = CreateObject("MSXML2.DOMDocument")
    Set objXmlHttp = CreateObject("MSXML2.XMLHTTP")
    ' Load the XML
    objDom.async = False
    'Open the connection to the Web Service
    objXmlHttp.Open "PUT", "meuDominio/api/values/put/" & studentDados & "/1", False
    ' Create the Headers fo the XML
    objXmlHttp.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
    objXmlHttp.setRequestHeader "SOAPAction", "http://meuDominio/api/values/put/" & listaDeObjetos & "/1"
    ' Send the commands to request the XML response
    objXmlHttp.send objDom.xml

    Eu queria passar o parâmetro Collection que contém Objetos do tipo Student.

    Agradeço.


    quinta-feira, 21 de janeiro de 2016 16:32
  • Diretamente não tem como Ricardo Soares Nogueira, precisa de uma tradução. 

    Tente assim:

    [
    	{"FirstName":"Joao", "LastName":"Fulano", "Student_ID":1}, 
    	{"FirstName":"Ricardo", "LastName":"Soares", "Student_ID":2}
    ]

    Esse é o formato JSON que o WebApi entende, então crie uma variável json e coloque esse contéudo fixamente só para testar e mude seu 

    objXmlHttp.setRequestHeader "Content-Type", "application/json; charset=utf-8"

    objXmlHttp.send json

    Ou seja, o trabalho no caso do VB6 é braçal não dá pra enviar o objeto e o mesmo automáticamente ser serializado, tem que construir uma rotina para isso. (Exemplo: http://www.codelines.com/serial.htm)

    Faça esse teste e mande um post em vez de put por enquanto e ve se chega no WebApi o que deseja!

    Eu também não sei como você está formatado seu WebApi dependendo ele precisa saber o jeito que chega também!

    Um exemplo:

    Eu fiz um PHP enviando para Web Api .NET

    Código Exemplo:

    PHP

    <?php
    
    $ch = curl_init();
    
    $headers = array('Accept: application/json','Content-Type: application/json'); 
    
    $url = 'http://localhost:61498/api/Carros';
    
    $fields = array(array("Id" => 1, "Description" => "Comodoro"), array("Id" => 2, "Description" => "Fusca"));
    
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch,CURLOPT_POST, true);
    curl_setopt($ch,CURLOPT_POSTFIELDS, json_encode($fields));
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
    
    
    $result = curl_exec($ch);
    
    curl_close($ch);
    
    echo 'Item executado com êxito ...';

    WebApi Methodo

    [HttpPost]
    public void Post([FromBody]Carro[] value)
    {
    	var itens = Request.Body;
    	var c = value;
    }

    Resultado:

    Ou seja, o dado foi formato JSON, foi serializado pelo PHP e enviado com Header Json, pronto satisfez a obrigação imposta pelo WebApi e seu decorador (FromBody, apesar que existem outras formas de ele resgatar como FromForm, etc ...)


    Só ratificando, não existe nada pronto em VB6 por ser muito antigo e descontinuado para essas novas features que utilizamos hoje em dia!


    Fulvio C



    quinta-feira, 21 de janeiro de 2016 18:57