sábado, 12 de marzo de 2011

Consumir Servicio Web desde Silverlight

Debido a que he buscado y buscado por mucho tiempo en Google un método para guardar datos en Silverlight, me he dado la tarea de crear un servicio web para enviar los datos a una base de datos para poder hacer una inserción de registros.
Creacion del Servicio Web.

En el servicio web agregamos una referencia a MySql.Data.MySqlClient
Creamos el siguiente método web

[WebMethod]
public void insDocuments(int doc_type, string refr, byte[] imagen, int usr, DateTime dt, int st)
{


//System.Windows.Media.Imaging.BitmapImage bImg = new System.Windows.Media.Imaging.BitmapImage();

MySqlConnection cnn = new MySqlConnection("server=localhost;User Id=root;database=db_scanning");
MySqlCommand cmd = new MySqlCommand();
cnn.Open();
string sql = "insert into documents(id_document,doc_type,doc_reference,doc_scanned,user_id,mod_date,state)" +
" VALUES(@id_document,@doc_type,@doc_reference,@doc_scanned,@user_id,@mod_date,@state)";
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Connection = cnn;
cmd.Parameters.Add("@id_document",MySqlDbType.VarChar).Value=getCode(doc_type);
cmd.Parameters.Add("@doc_type", MySqlDbType.Int32).Value = doc_type;
cmd.Parameters.Add("@doc_reference", MySqlDbType.VarChar).Value = refr;
cmd.Parameters.Add("@doc_scanned", MySqlDbType.LongBlob).Value = imagen;
cmd.Parameters.Add("@user_id", MySqlDbType.Int32).Value = usr;
cmd.Parameters.Add("@mod_date", MySqlDbType.Datetime).Value = dt;
cmd.Parameters.Add("@state", MySqlDbType.Int32).Value = st;
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cnn.Close();
}

Despues lo invocamos desde la aplicacion Silverlight agregando la respectiva referencia a servicio.

OpenFileDialog op = new OpenFileDialog();
op.ShowDialog();
BitmapImage imageSource = new BitmapImage();
imageSource.SetSource(op.File.OpenRead());
FileStream fst = op.File.OpenRead();
byte[] bytes = new byte[fst.Length];
fst.Read(bytes, 0, bytes.Length);

svc.insDocumentsAsync(2, "REF", bytes, 1, DateTime.Today, 1);
Con esto ya podemos trabajar insertando registros a una base de datos utilizando Silverlight.

3 comentarios:

  1. pero el codigo fuente que paso solo es un fragmento sube el codigo fuente.

    ResponderEliminar
  2. de pura casualidad sabes como guardar una imagen que tengo en mi canvas ya la tengo serializada con toStringBase64(); coloque la convercion en un texblock pero al enviar la cadena al webservice me genera un error en el apartado de references en donde se crean un arreglo no soporta mas de un millos de caracteres sabrias como ayudarme u otra forma quiero guardar la imagen en una Base de Datos SQL server 2008 este es mi correo josac872010@hotmail.com espero puedas ayudarme y de antemano muchas gracias

    ResponderEliminar
  3. Por ahi tengo una funcioncita que te podria servir dejame buscarla...

    ResponderEliminar