Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Consumir servicio WCF

Iniciado por gomeslaw, Febrero 15, 2017, 11:57:27 AM

Tema anterior - Siguiente tema
Buenas a todos, a ver si me podeis ayudar con esto que estoy muy perdido
 
Necesito consumir datos de un servicio WCF(Microsoft Comunication Fundation) en Unity, pero no tengo ni idea de los pasos que debo tomar para hacerlo. Se supone que una empresa me suministra (web service) datos con WCF y yo los tengo que visualizar en Unity. Alguien sabe como hacerlo? Agradeceria mucho la ayuda.
 
Muchas gracias de antemano!

Te refieres a Windows Communication Foundation que es un sistema de mensajería que funciona sobre http y otros protocolos a diferencia de un webservice.
 
Entiendo que te querrás comunicar vía http. Un ejemplo en C# por aquí:
 
https://msdn.microsoft.com/es-es/library/bb412178%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
 
 

Febrero 15, 2017, 08:49:50 PM #2 Ultima modificación: Febrero 15, 2017, 08:51:53 PM por elanguido
Depende mucho de cómo se haya creado el servicio, binding usado y demás, pero suponiendo que es un servicio básico puedes empezar por aquí:
 
Lo primero que tienes que hacer es generar la clase "proxy" usada para consumir este tipo de servicios, para ello existe una herramienta llamada svcutil.exe que podrás encontrar en la siguiente ruta:
 

C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\

 
Abres una consola de comandos, ve a esa ruta y ejecuta los siguiente:
 

svcutil -out:MiProxy.cs http://www.servidor.com/lo_que_sea.svc/?wsdl // importante la parte del final: ?wsdl

 
Esto te generará una fichero llamado MiProxy.cs (o como lo quieras llamar) que deberás llevar a tu proyecto de Unity.
 
Una vez en Unity, ve a Player Settings -> Other settings -> Api Compatibility Level y asegúrate de que lo tienes establecido en .NET 2.0.
 
Para ejecutar una llamada al servicio, el fichero MiProxy.cs contendrá una clase llamada NombreDelServicioClient (siempre termina en Client) que contendrá los métodos que expone el servicio en cuestión. Puedes usarla así:
 

var client = new NombreDelServicioClient(new BasicHttpBinding(), new EndpointAddress("http://www.servidor.com/lo_que_sea.svc"));
var response = client.MetodoDelServicio();

 
 Creo que no hace falta decir que deberás sustituir las URL's por las del servicio en cuestión, y el contenido del fichero MiProxy.cs será distinto dependiendo del servicio que quieras consumir.
 
Suerte!
 
 

Febrero 16, 2017, 03:36:09 PM #3 Ultima modificación: Febrero 17, 2017, 06:14:45 PM por pioj
Cita de: elanguido date=1487188190Depende mucho de cómo se haya creado el servicio, binding usado y demás, pero suponiendo que es un servicio básico puedes empezar por aquí:
   
   
      Lo primero que tienes que hacer es generar la clase "proxy" usada para consumir este tipo de servicios, para ello existe una herramienta llamada svcutil.exe que podrás encontrar en la siguiente ruta:
   
   

C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\

   
      Abres una consola de comandos, ve a esa ruta y ejecuta los siguiente:
   
   

svcutil -out:MiProxy.cs http://www.servidor.com/lo_que_sea.svc/?wsdl // importante la parte del final: ?wsdl

   
      Esto te generará una fichero llamado MiProxy.cs (o como lo quieras llamar) que deberás llevar a tu proyecto de Unity.
   
   
      Una vez en Unity, ve a Player Settings -> Other settings -> Api Compatibility Level y asegúrate de que lo tienes establecido en .NET 2.0.
   
   
      Para ejecutar una llamada al servicio, el fichero MiProxy.cs contendrá una clase llamada NombreDelServicioClient (siempre termina en Client) que contendrá los métodos que expone el servicio en cuestión. Puedes usarla así:
   
   

var client = new NombreDelServicioClient(new BasicHttpBinding(), new EndpointAddress("http://www.servidor.com/lo_que_sea.svc"));
var response = client.MetodoDelServicio();

   
       Creo que no hace falta decir que deberás sustituir las URL's por las del servicio en cuestión, y el contenido del fichero MiProxy.cs será distinto dependiendo del servicio que quieras consumir.
   
   
      Suerte!
   
   
       
   


Buen aporte! Lo estoy haciendo con esta pagina: 
 
http://www.webservicex.net/globalweather.asmx?wsdl
 
ejecuto en esta ruta:
 

C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\

 
el comando:
 
svcutil -out:WcfDemoServiceClient.cs http://www.webservicex.net/globalweather.asmx?wsdl
 
Despues me crea el archivo WcfDemoServiceClient.cs que importo en Unity, hago otro script llamado callService.cs. Con este ultimo en la funcion Start necesito escribir las dos lineas que comentas he probado con esto:
 

public class callService : MonoBehaviour
{
    void Start()
    {      
        GlobalWeatherSoapClient client = new GlobalWeatherSoapClient(new BasicHttpBinding(), new EndpointAddress("http://www.webservicex.net/globalweather.asmx"));
        string receviedString = client.GetCitiesByCountry("Spain");
        Debug.Log(receviedString);      
    }
}

 
Cuando le doy play, me muestra el siguiente error. No se si estare creando bien las lineas.
 



   
      WebException: There was an error on processing web request: Status code 500(InternalServerError): Internal Server Error
      System.ServiceModel.Channels.HttpRequestChannel+HttpChannelRequestAsyncResult.WaitEnd ()
      System.ServiceModel.Channels.HttpRequestChannel.EndRequest (IAsyncResult result)
      System.ServiceModel.Channels.HttpRequestChannel.Request (System.ServiceModel.Channels.Message message, TimeSpan timeout)
      System.ServiceModel.ClientRuntimeChannel.Request (System.ServiceModel.Channels.Message msg, TimeSpan timeout)
      System.ServiceModel.ClientRuntimeChannel.Request (System.ServiceModel.Description.OperationDescription od, System.Object[] parameters)
      System.ServiceModel.ClientRuntimeChannel.DoProcess (System.Reflection.MethodBase method, System.String operationName, System.Object[] parameters)
      System.ServiceModel.ClientRuntimeChannel.Process (System.Reflection.MethodBase method, System.String operationName, System.Object[] parameters)
   

[/quote]
 
Se te ocurre algo??
 
Muchas gracias!
 
 

Etiquetas: