terça-feira, 16 de dezembro de 2008

Silverlight access data, Silverlight 2 with WebServices | Acesso a dados com Silverlight, Silverlight com webservices

Para quem estiver precisando de fazer acesso a dados com o Silverlight primeiramente precisa saber que não há como acessar o banco de dados diretamente, mesmo podendo utilizar linq dentro do silverligth. Ou seja, o acesso se faz da seguinte forma:

Silverlight –> Webservices –> Database

E neste post há um tutorial de como se faz: http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx

Abaixo segue um trecho de código como exemplo:

public Page()
        {
            InitializeComponent();

            BasicHttpBinding bind = new BasicHttpBinding();
            EndpointAddress endpoint = new EndpointAddress("http://localhost:49751/webservice.asmx");

            ServiceReferenceEZWebsite.WebServiceSoapClient asmx = new SilverlightApplication.ServiceReferenceEZWebsite.WebServiceSoapClient(bind, endpoint);
            asmx.CategoriesCompleted += new EventHandler<CategoriesCompletedEventArgs>(asmx_HelloWorldWithAsmxCompleted);
            asmx.CategoriesAsync();  
        }

        void asmx_HelloWorldWithAsmxCompleted(object sender, CategoriesCompletedEventArgs e)
        {
            var categories = e.Result;

            foreach (Category category in categories)
            {
                this.StackPanelMenu.Children.Add(new ButtonEZ(category.name));
            }
        }

Segue trecho do webservice:

/// <summary>
    /// Summary description for WebService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
    [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService
    {
        [WebMethod]
        public List<Category> Categories()
        {
            try
            {
                var dc = new DataClassesEZWebsiteDataContext();
                return dc.Categories.ToList();
            }
            catch (Exception ex)
            {
                EZUtil.Util.ErrorTreatment(ex);
                return null;
            }
        }
    }

Nenhum comentário: