Comunidad de diseño web y desarrollo en internet online

Flex y C# con weborb

Citar            
MensajeEscrito el 04 Ene 2011 05:37 pm
Hola a todos,
En primer lugar deseándoles un feliz y prospero 2011.
Ahora lo duro. Mi problema consiste en que necesito conectar Flex con SqlServer 2008 y me imagino que la forma es con C#. Bueno como no sabia como hacerlo busque en google y encontré que necesitaba weborb lo baje y lo instale siguiendo un tutorial de aquí mismo publicado por JJJDDD pero me frene en un punto y es que tengo instalado Flex 3, Visual 2008, pero ademas tengo oracle en el puerto 8080 y wamp en el puerto 8081. Ahora al instalar IIS me supongo queda en el puerto 80 y creo que lo que hago mal es cambiar el puerto por que al intentar iniciar el weborb no me da, me bota el siguiente error:
faultCode:Client.Error.MessageSend
faultString:'Send failed'
faultDetail:'Channel.Security.Error error Error #2048
url: 'https://localhost/console/weborb.aspx''

Sera que alguien me puede ayudar a configurar bien el tal weborb o si saben otra forma de conectarme desde flex a sqlserver 2008 con c#. Necesito consultar y traer datos, insertar, actualizar y eliminar datos en una base de datos en SQLServer 2008.

Por su tiempo y colaboración mucha gracias,

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 05 Ene 2011 02:41 am
Hola! Cómo andás??
La forma más simple y directa que conozco para conectar tu app de flex con sql server, es mediante WebServices. La parte de SQL SERVER la manejás desde C# o VB.NET o el lenguaje que quieras, lo tratás como cualquier lenguaje back-end , y mediante un webservice le pasás o recibís parámetros desde flex a tu lenguaje back-end (en tu caso C#) y desde c# para flex. Mientras te funcione tu webservice en el servidor, lo podés invocar desde flex.
En mi caso me comunico con vb.net, y tengo montado un xampp, pero C# y vb.net son lenguajes muy similares, así que no creo que tengas problema en pasar de uno a otro...
Y con respecto a lo que mencionás de weborb, ahí no te puedo ayudar proque nunca lo manejé...

Código ActionScript :


<mx:Script>
   <![CDATA[
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;

//PARA LLAMAR AL WEB SERVICE: 
public function llamoAlWebService():void{
   this.wsMiWebService.MiMetodo();   
}

public function handleResult(event: ResultEvent):void{
      Alert.show("Mira que lindo result: " + event.result );
   }

public function handleFault(event: FaultEvent):void{   
      Alert.show("Fault: " + event.fault.toString() +"  "+ event.fault.faultCode.toString());                         
   }   
]]>
</mx:Script>

 <mx:WebService id="wsMiWebService"
        showBusyCursor="true"
        wsdl="{URL}/NombreWebService.asmx?wsdl">
        <mx:operation name="MiMetodo"
                fault="handleFault(event)"
                result="handleResult(event)">
                <mx:request>                
                   <datos>{this.datos}</datos>
                </mx:request>  
        </mx:operation>               
    </mx:WebService>    



El web service lo podés crear desde el visual studio, tiene una opción para crealos.

Código :

  <WebMethod()> _
       Public Function Reporte(ByVal datos As String) As String 
'Lo que quieras que haga
return "=)"
   End Function


Bueno, espero haberte dado una mano, que estés bien! Saludos!

Por Arteniz

41 de clabLevel



Genero:Masculino  

Programador

firefox
Citar            
MensajeEscrito el 05 Ene 2011 04:11 am
Muchas gracias por tu tiempo y por tu ayuda. Tengo algunas dudas??
Hablas de que tienes xampp para visual net, pero ese no es para PHP??
Bueno y sobre el webservice, con el puedo consultar la base de datos y enviar los datos a Flex??
no se tienen que enviar en XML?? para poder mostrarlos??

Me podrías documentar un poco mejor??
De nuevo muchas gracias por tu tiempo y tu valiosa colaboración,

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 05 Ene 2011 08:59 pm
Para aclarar, no, la forma más fácil NO es con web services, además de ser la menos eficiente.

Ahora, tampoco necesitas c#, puedes usar php o java también, depende de lo que prefieras. Weborb funciona así: tienes una versión developer que solo permite 5 conexiones, osea, te conectas desde un pc, luego desde otros 4 diferentes y toca reiniciar el servicio para admitir ips diferentes, no importa que ya te hayas desconectado desde todos los clientes.
Te regalan UNA(1) versión community edition que levanta estos limites, después de implementar esta, ya te jodiste, toca pagar US$2000 por nucleo que tenga el servidor, osea un mínimo de us$4000 por servidor.

si de todas formas lo quieres usar, no hay problema, haces un directorio virtual en iss, verificas bien el web.config, le pones el archivo crossdomain.xml en la raiz de ese directorio virtual (a eso se debe el error #2048) y añades los archivos dll de tus clases, weborb tiene un destino genérico que te permite acceder a estas clases sin necesidad de hacer configuraciones adicionales, las utilizas con remoteobject y te dan un desempeño excelente y facilidad de uso, como si fueran funciones normales.

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 06 Ene 2011 01:45 am

Xyrer escribió:

Para aclarar, no, la forma más fácil NO es con web services, además de ser la menos eficiente.

Ahora, tampoco necesitas c#, puedes usar php o java también, depende de lo que prefieras. Weborb funciona así: tienes una versión developer que solo permite 5 conexiones, osea, te conectas desde un pc, luego desde otros 4 diferentes y toca reiniciar el servicio para admitir ips diferentes, no importa que ya te hayas desconectado desde todos los clientes.
Te regalan UNA(1) versión community edition que levanta estos limites, después de implementar esta, ya te jodiste, toca pagar US$2000 por nucleo que tenga el servidor, osea un mínimo de us$4000 por servidor.

si de todas formas lo quieres usar, no hay problema, haces un directorio virtual en iss, verificas bien el web.config, le pones el archivo crossdomain.xml en la raiz de ese directorio virtual (a eso se debe el error #2048) y añades los archivos dll de tus clases, weborb tiene un destino genérico que te permite acceder a estas clases sin necesidad de hacer configuraciones adicionales, las utilizas con remoteobject y te dan un desempeño excelente y facilidad de uso, como si fueran funciones normales.


Aclaro que puse lo que yo conocía jaja, nunca utilicé weborb ni nada parecido... sólo me manejé con webservices, por eso puse que era lo más simple , desde mi punto de vista :P

Con respecto a lo que me preguntaste a mí, lo que te puedo decir es que bajé un módulo para que te permita ejecutar .net en un apache, y por eso te podés manejar tranquilamente con archivos .net, de lo contrario, no te los va a leer.

Y sí, mediante webservices podés enviar datos desde flex a tu sql server y viceversa ( flex le manda a c# y C# se comunica con tu sql server).

En el ejemplo que te puse , ahí le estoy mandando la variable datos a la parte de .net , y desde .net envío mediante el return a flex, que lo leo en event.result :P
Saludos!

Por Arteniz

41 de clabLevel



Genero:Masculino  

Programador

firefox
Citar            
MensajeEscrito el 06 Ene 2011 04:15 am
Muchas gracias por tu respuesta, me aclaraste varias dudas, pero sigo con la inquietud de si al utilizar webservices como Flex recibe los datos para poder mostrarlos en una grilla o algo; es decir hasta donde se yo en php lo he hecho con un php que crea un xml el cual lo recibe Flex y eso si lo interpreta bien, pero en webservice con C# no se??

Muchas gracias de nuevo por tu ayuda,

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Ene 2011 05:22 pm
sería casi lo mismo, el php me imagino que lo usas con httpservice, pero si ya usas php, pues usa Zend Amf, es extremadamente fácil de usar y es soportado por adobe, y desde php también puedes acceder a sql server desde que se esté ejecutando en windows

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 06 Ene 2011 07:04 pm
Mmmm, lo probaré pero la verdad es una exigencia (no mía si no de la empresa) que sea con C# SQLServer 2008 y Flex. Pero por que voy a intentar vender la idea con php, muchas gracias nuevamente por tus respuestas,

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Ene 2011 08:28 pm
ah bueno, el mismo problema tenía yo y estoy haciendo pruebas con fluorinefx que es algo muy parecido a weborb pero es opensource, si te interesa te ayudo

Por Xyrer

628 de clabLevel

1 tutorial

Genero:Masculino  

Android App Development

chrome
Citar            
MensajeEscrito el 07 Ene 2011 01:33 pm
Hola, bueno, en mi caso para manejarme con php y flex, uso AMFPHP , funciona sin problemas y es simple!

Por el lado de utilizar C# y si podés llenar o no un datagrid, te digo que sí podés! Armás tu objeto o lo que quieras enviar desde C# , y lo mandás en el return de método en C#, y después en flex, lo recibís en tu manejador de evento result, en el atributo event.result .

Fijate en la primer repsuesta que te dí: Desde Flex, le estoy mandando la variable datos acá, a C# ( en mi caso vb.net):

Código ActionScript :

                <mx:request>                
                   <datos>{this.datos}</datos>
                </mx:request>  


Y desde C# ( en mi caso vb.net): Estoy enviando para flex ''=)'' , aunque puede ser lo que vos quieras:

Código :

  <WebMethod()> _
       Public Function Reporte(ByVal datos As String) As String 
'Lo que quieras que haga
return "=)" ' Envío la carita feliz, porque todos somos felices =)
   End Function


Y en flex, lo recibo acá:

Código ActionScript :

public function handleResult(event: ResultEvent):void{
      Alert.show("Mira que lindo result: " + event.result ); 
//EL RESULTADO ES LA VENTANA: "Mira que lindo result: =) "
   }


Acá te dejo el ejemplo de nuevo:

Código ActionScript :


<mx:Script>
   <![CDATA[
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;

//PARA LLAMAR AL WEB SERVICE: 
public function llamoAlWebService():void{
   this.wsMiWebService.MiMetodo();   
}

public function handleResult(event: ResultEvent):void{
      Alert.show("Mira que lindo result: " + event.result );
   }

public function handleFault(event: FaultEvent):void{   
      Alert.show("Fault: " + event.fault.toString() +"  "+ event.fault.faultCode.toString());                         
   }   
]]>
</mx:Script>

 <mx:WebService id="wsMiWebService"
        showBusyCursor="true"
        wsdl="{URL}/NombreWebService.asmx?wsdl">
        <mx:operation name="MiMetodo"
                fault="handleFault(event)"
                result="handleResult(event)">
                <mx:request>                
                   <datos>{this.datos}</datos>
                </mx:request>  
        </mx:operation>               
    </mx:WebService>    



El web service lo podés crear desde el visual studio, tiene una opción para crealos.

Código :

  <WebMethod()> _
       Public Function Reporte(ByVal datos As String) As String 
'Lo que quieras que haga
return "=)"
   End Function


Bueno, espero haberte dado una mano, que estés bien! Saludos![/quote]

Cualquier cosa preguntá! Saludos

Por Arteniz

41 de clabLevel



Genero:Masculino  

Programador

firefox
Citar            
MensajeEscrito el 08 Ene 2011 03:07 pm
Hola, en verdad agradezco tu tiempo e interés en ayudarme; pero me disculpas la ignorancia pero ya te entiendo lo que me mostras, sin embargo sigo con la duda: ¿Tengo que enviar desde el Webservice los datos como XML o como los debe recibir Flex para mostrarlos datos de una consulta a una base de datos?

De nuevo muchas gracias,

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Ene 2011 01:55 pm
Hola, los enviás de forma directa, sin utilizar un XML. ( en realidad armás una especie de XML en el <mx:Request> del webservice )

<mx:request>
<primerDato>{this.nombre}</primerDato>
<segundoDato>{this.apellido}</segundoDato>
<tercerDato>{this.algunoOtroDatoQueQuierasMandar}</tercerDato>
</mx:request>

Y por cada elemento agregado en el <mx:request> , tenés que tener una variable con el mismo en el método de C# en tu caso:

<WebMethod()> _
Public Function Reporte(ByVal primerDato As String, segundoDato As String, tercerDato As String) As String


Y Flex, los recibe desde el event.result:
En tu método del web service lo devolvés mediante el return , y en Flex tenés los datos en el método que ejecutás al result del webservice, y en el event.result tenés los datos que mandaste.

Saludos!

Por Arteniz

41 de clabLevel



Genero:Masculino  

Programador

firefox
Citar            
MensajeEscrito el 10 Ene 2011 02:37 pm
Mmmm, ya veo voy a trabajarle así como me explicas y te cuento, muchas gracias por tu ayuda...

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Ene 2011 02:21 pm
Buenos días, Arteniz te cuento que por fin puse en practica lo que me explicaste y no pude ver resultados, implemente todo como me respondiste y simplemente se ve trabajando la aplicación pero no hace nada, la idea es consultar una base de datos con un parámetro y que me retorne unos valores para mostrarlos en un grid pero se ve como hace el Showbusycursor pero igual no llena la grilla, no muestra error pero tampoco hace nada; creo que es la forma como se reciben los datos pero como me decías que no hay que darles formatos de XML??
Bueno pero te cuento que prove con algo sencillo como un mensaje formateado desde C# funciona bien
En fin si me puedes ayudar te lo agradecería muchisimo, este es mi código:
En C#
Lo que hace es que retorna un datatable con los datos y lo que esperaba era recibirlo en Flex y mostrarlos en la Grid

En Flex:
<mx:WebService id="myServicio" wsdl="http://localhost:49405/Service1.asmx?WSDL" showBusyCursor="true"
result="Bien()" fault="Mal()" />
private function Bien():void
{
dgDatos.dataProvider = myServicio.ConsultaDatosAFlex.lastresult;
Alert.show("Todo Bien");
}

private function Mal():void
{
Alert.show("Error en el servicio...","Mensaje desde Flex");
}

<!-- Interfaz -->
<mx:Label x="48" y="29" text="Ingrese el documento a consultar"/>
<mx:Button x="216" y="55" label="Consultar" id="btnConsultar"
click="myServicio.ConsultaDatosAFlex(txtDoc.text);"/>
<mx:TextInput x="48" y="55" id="txtDoc"/>
<mx:DataGrid x="48" y="95" id="dgDatos" width="70%" >
<mx:columns>
<mx:DataGridColumn headerText="Column 1" dataField="col1"/>
<mx:DataGridColumn headerText="Column 2" dataField="col2"/>
<mx:DataGridColumn headerText="Column 3" dataField="col3"/>
</mx:columns>
</mx:DataGrid>

No se si ademas en la grid tengo que agregar mas valores o algo!!

De antemano muchas gracias por tu tiempo y excelente disposición.

Por acumulador

28 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Ene 2011 06:49 pm
Lo que te puedo decir es que :
Manejate con :
mx.rpc.events.ResultEvent y mx.rpc.events.FaultEvent para el manejo de eventos del result y del fault del webservice, por lo que deberías agregarle al Bien() y Mal() esto:

private function Bien(event: ResutEvent):void{
dgDatos.dataProvider = event.result;
}

private function Mal(event:FaultEvent):void{
Alert.show("EPA: " + event.fault.toString());
}

Probá con eso y contame! Saludos!

Por Arteniz

41 de clabLevel



Genero:Masculino  

Programador

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.