Windows Phone 8 ——Webservice返回Dataset处理方法
客户端程序接到返回的DataSet内容是如下的形式:
1 [0]: <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 2 <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 3 <xs:complexType> 4 <xs:choice minOccurs="0" maxOccurs="unbounded"> 5 <xs:element name="Table1"> 6 <xs:complexType> 7 <xs:sequence> 8 <xs:element name="Login_ID" type="xs:string" minOccurs="0" /> 9 <xs:element name="UserName" type="xs:string" minOccurs="0" /> 10 <xs:element name="UserGender" type="xs:boolean" minOccurs="0" /> 11 <xs:element name="UserTEL" type="xs:string" minOccurs="0" /> 12 <xs:element name="Login_PWD" type="xs:string" minOccurs="0" /> 13 </xs:sequence> 14 </xs:complexType> 15 </xs:element> 16 </xs:choice> 17 </xs:complexType> 18 </xs:element> 19 </xs:schema> 20 [1]: <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 21 <NewDataSet xmlns=""> 22 <Table1 diffgr:id="Table11" msdata:rowOrder="0"> 23 <Login_ID>daitou</Login_ID> 24 <UserName>zy</UserName> 25 <Login_PWD>2</Login_PWD> 26 </Table1> 27 <Table1 diffgr:id="Table12" msdata:rowOrder="1"> 28 <Login_ID>kwan</Login_ID> 29 <UserName>gkh</UserName> 30 <Login_PWD>1</Login_PWD> 31 </Table1> 32 </NewDataSet> 33 </diffgr:diffgram>
整个内容有两个元素:schema和diffgr
——————以上内容接收和解析方法:
1 private void Button_Click_1(object sender, RoutedEventArgs e) 2 { 3 string name = txtUserName.Text.Trim(); 4 string pwd = pbPwd.Password; 5 if (name != "" && pwd != "") 6 { 7 ServiceReference1.WebServiceSoapClient ws = new ServiceReference1.WebServiceSoapClient(); 8 ws.LoginCompleted += new EventHandler<ServiceReference1.LoginCompletedEventArgs>(ws_LoginCompleted); 9 ws.LoginAsync(name, pwd); 10 } 11 else MessageBox.Show("请正确输入用户名或密码"); 12 13 } 14 void ws_LoginCompleted(object sender, ServiceReference1.LoginCompletedEventArgs e) 15 { 16 if (e.Error == null) 17 { 18 IEnumerable<XElement> iexe = e.Result.Nodes[1].Descendants("Table1"); 19 if (iexe.Count() > 0) 20 { 21 string currName = txtUserName.Text.Trim(); 22 string currPwd = pbPwd.Password; 23 24 foreach (var item in iexe) 25 { 26 if (item.Element("Login_ID").Value==currName && item.Element("Login_PWD").Value==currPwd ) 27 { 28 this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); 29 } 30 31 } 32 } 33 else MessageBox.Show("用户名或密码错误"); 34 35 } 36 else MessageBox.Show("登录失败……"); 37 38 }
注:要想使用XELEMENT需要引用using System.Xml.Linq;
用IIS发布webservice
添加服务引用时通过输入服务asmx地址来添加,最好从ie地址栏复制来asmx的地址,并把localhost改为局域网内的ip即可在真机调试