silverlight touch_2__Access data from DB/Webservice

silverlight项目通常放在web程序里,通过webservice取出据。但是目前silverlight还 不支持cross-domain,因此不能直接访问webservice或者database。 目前有2种解决方案, 1〉将访问数据的webservice嵌入到web项目,这样,webservice和web app就在同一个domain。2〉访问数据的webservice是在另外的服务器上,这样就要通过proxy (实际上也是一个webservice)来访问取出据的webservice。

  操作步骤如下:

solution 1.

1)新建web app, 工程名暂且叫 webinterface。 在这个工程中添加一个新的webservice Item,文件名WebService.asmx。 我们可以在这个文件操作数据库,或者访问webservice。 一个简单的例子

        [WebMethod]
        [ScriptMethod(UseHttpGet = true)]
        public Data[] GetReturnIndex(string ...)
        {

              return ....  // 在这里访问数据库/webservice数据并放回。
        }

需要注意的是,在默认设置中,WebService.asmx文件中的

[System.Web.Script.Services.ScriptService] 

是被注释掉的,必须去掉注释符号,silverlight才能通过script来访问web method返回的数据。 另外, 在webconfig 中加入

<webServices>
   <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
   </protocols>
  </webServices>

作为

<system.web>

的子节点, 这样系统才允许通过get方式访问。

到这里,数据读取到了刚才的 web service

2) silverlight项目中访问web app 中的webservice。

Silverlight项目中访问webservice是通过http实现的,首先得到webservice的相对路径,通过httpresponse返回所取得字符串。再根据已知的文件的格式解析

           string serverUri = HtmlPage.DocumentUri.ToString();
            int thisApp = serverUri.IndexOf("/Default.aspx");
            serverUri = serverUri.Substring(0, thisApp) + "/WebService.asmx";
            serverUri += "/LoadLocalTestData?shareClassId=" + _shareClassId + "&dateStart=" + dateStart + "&dateEnd=" + dateEnd;    // 得到webapp中的webservice的路径
            System.Uri webServiceUri = new System.Uri(serverUri);

// 通过http 访问webservice的数据,以stream返回

            BrowserHttpWebRequest request = new BrowserHttpWebRequest(webServiceUri);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader responseReader = new StreamReader(response.GetResponseStream());

            string txtResponse = responseReader.ReadToEnd();
            response.Close();           

            List<TimeSeriesData> tradingDatas = new List<TimeSeriesData>();
            TradingData tradeData = null;
            XmlReader reader = XmlReader.Create(new StringReader(txtResponse));

剩下来的事情就是对返回的串进行解析,得到想要的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值