tuxedo
30.05.2007, 10:54
hi leute...
leider stehe ich wieder mal etwas auf dem schlauch.
ich habe in .NET einen simplen webservice geschrieben, welcher mir auch
brav beim testen im browser den output liefert.
leider kann ich den service zwar via flex connecten, bekomme aber umgehend
beim zugriff auf die methode eine fehlermeldung: BadWSDL....
recherchen ergaben, das FLEX sich anscheinend am verwendeten datentyp DataSet (VB/C#) stört und schlicht und ergreifend keinen bock hat, den kram
zu parsen.
die frage die sich nun stellt:
a) hat jemand schonmal erfahrungen mit diesem problem gemacht?
b) gibt es ein simles beispiel mit db-zugriff auf .NET/Flex basis, wie man es
richtig macht?
c#
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.SqlClient;
[WebService(Namespace = "http://microsoft.com/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class webService : System.Web.Services.WebService
{
DataSet _returnDS = new DataSet();
public webService()
{
}
private DataSet sendSQLQuery(String querySQL)
{
String _sqlServ = "blabla";
String _sqlCmd = querySQL;
SqlConnection sql_con = new SqlConnection(_sqlServ);
DataSet sql_ret = new DataSet();
SqlDataAdapter sql_da = new SqlDataAdapter(_sqlCmd, sql_con);
try
{
sql_con.Open();
sql_da.Fill(sql_ret);
}
catch (SqlException ex)
{
}
finally
{
sql_con.Close();
}
return sql_ret;
}
/* getDepartments (); */
[WebMethod(Description = "blabla")]
public DataSet getDepartments()
{
_returnDS = sendSQLQuery("SELECT blabla,blabla FROM tblblabla");
return _returnDS;
}
}
flex für WS
/*
retrieves and computes the url under which the
webservice should be available.
returns: nothing
*/
import mx.rpc.soap.WebService;
import mx.rpc.events.FaultEvent;
import mx.rpc.soap.*;
[Bindable] public var webserviceURL:String;
[Bindable] public var tool_ws:mx.rpc.soap.WebService;
public function setWebservice ():void
{
tool_ws = new mx.rpc.soap.WebService();
if (flashVars.serviceURL)
{
serverURL = flashVars.serviceURL;
} else {
serverURL = "http://blabla";
}
webserviceURL = serverURL + "/Service.asmx?WSDL";
trace ("RESET TO >> webserviceURL: " + webserviceURL);
tool_ws.useProxy = false;
tool_ws.wsdl = webserviceURL;
if (tool_ws.canLoadWSDL())
{
tool_ws.loadWSDL();
}
tool_ws.getDepartments.addEventListener("result", fillDepartmentCombos);
tool_ws.addEventListener("fault", faultHandler);
}
public function faultHandler(event:FaultEvent):void {
trace("event.message: "+event.message);
trace("event.fault: "+event.fault);
}
FLEX aufruf
public function init():void
{
flashVars = Application.application.parameters;
setWebservice();
tool_ws.getDepartments();
}
wäre über jeden tip sehr verbunden.
danke vielmals
gruss
tux
leider stehe ich wieder mal etwas auf dem schlauch.
ich habe in .NET einen simplen webservice geschrieben, welcher mir auch
brav beim testen im browser den output liefert.
leider kann ich den service zwar via flex connecten, bekomme aber umgehend
beim zugriff auf die methode eine fehlermeldung: BadWSDL....
recherchen ergaben, das FLEX sich anscheinend am verwendeten datentyp DataSet (VB/C#) stört und schlicht und ergreifend keinen bock hat, den kram
zu parsen.
die frage die sich nun stellt:
a) hat jemand schonmal erfahrungen mit diesem problem gemacht?
b) gibt es ein simles beispiel mit db-zugriff auf .NET/Flex basis, wie man es
richtig macht?
c#
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.SqlClient;
[WebService(Namespace = "http://microsoft.com/webservices/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class webService : System.Web.Services.WebService
{
DataSet _returnDS = new DataSet();
public webService()
{
}
private DataSet sendSQLQuery(String querySQL)
{
String _sqlServ = "blabla";
String _sqlCmd = querySQL;
SqlConnection sql_con = new SqlConnection(_sqlServ);
DataSet sql_ret = new DataSet();
SqlDataAdapter sql_da = new SqlDataAdapter(_sqlCmd, sql_con);
try
{
sql_con.Open();
sql_da.Fill(sql_ret);
}
catch (SqlException ex)
{
}
finally
{
sql_con.Close();
}
return sql_ret;
}
/* getDepartments (); */
[WebMethod(Description = "blabla")]
public DataSet getDepartments()
{
_returnDS = sendSQLQuery("SELECT blabla,blabla FROM tblblabla");
return _returnDS;
}
}
flex für WS
/*
retrieves and computes the url under which the
webservice should be available.
returns: nothing
*/
import mx.rpc.soap.WebService;
import mx.rpc.events.FaultEvent;
import mx.rpc.soap.*;
[Bindable] public var webserviceURL:String;
[Bindable] public var tool_ws:mx.rpc.soap.WebService;
public function setWebservice ():void
{
tool_ws = new mx.rpc.soap.WebService();
if (flashVars.serviceURL)
{
serverURL = flashVars.serviceURL;
} else {
serverURL = "http://blabla";
}
webserviceURL = serverURL + "/Service.asmx?WSDL";
trace ("RESET TO >> webserviceURL: " + webserviceURL);
tool_ws.useProxy = false;
tool_ws.wsdl = webserviceURL;
if (tool_ws.canLoadWSDL())
{
tool_ws.loadWSDL();
}
tool_ws.getDepartments.addEventListener("result", fillDepartmentCombos);
tool_ws.addEventListener("fault", faultHandler);
}
public function faultHandler(event:FaultEvent):void {
trace("event.message: "+event.message);
trace("event.fault: "+event.fault);
}
FLEX aufruf
public function init():void
{
flashVars = Application.application.parameters;
setWebservice();
tool_ws.getDepartments();
}
wäre über jeden tip sehr verbunden.
danke vielmals
gruss
tux