您现在的位置>>.Net中文社区>>XML编程

WebServer返回指定XML内容

浏览量: 作者:未知 来源:互联网

通过创建WEBServer代理可以当作本地类使用,但能不能返回指定的XML呢?比如通过checkpass服务检测帐号和密码之后要返回该用户拥有的权限列表。怎么实现呢?
  ASP.NET Web服务支持在公共语言运行时中支持的所有基本数据类型,包括String,integer,Long等等。除了简单的基本数据类型之外,还支持基本数据类型的数组。
  但是,更有趣的是支持用户定义的类和结构体。基本上,任何可由XSD模式代表的类型都是可以作为ASP.NET的参数或返回类型。
  通过一个星期的摸索,解决了这个问题,并学习了如何读取和输出XML文档;数据库操作;WebServer的创建和引用。下面就部分源码供初学习者参考,不足之此请指正。

  1. /*CheckLogin服务*/ 
  2. using System; 
  3. using System.Web; 
  4. using System.Collections; 
  5. using System.Web.Services; 
  6. using System.Web.Services.Protocols; 
  7. using System.Configuration; 
  8. using System.Data; 
  9. using System.Data.SqlClient; 
  10. using mysql.SQL; 
  11. using myfunc.Common; 
  12.  
  13. /// <summary> 
  14. /// CheckLogin 的摘要说明 
  15. /// </summary> 
  16. [WebService(Namespace = "http://localhost/")] 
  17. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
  18. public class CheckLogin : System.Web.Services.WebService { 
  19.     public CheckLogin () { 
  20.         //如果使用设计的组件,请取消注释以下行  
  21.         //InitializeComponent();  
  22.     } 
  23.     //[WebMethod(Description = "Login", EnableSession = true)] 
  24.     [WebMethod] 
  25.     public checkuser Login(string sUserCode, string sPassword) 
  26.     { 
  27.         checkuser objcheckuser= new checkuser(); 
  28.         string sCheckLogin = ConfigurationManager.AppSettings["strCheckLogin"]; 
  29.         SqlShell objShell = new SqlShell(); 
  30.         SqlCommand objCommand = new SqlCommand(sCheckLogin); 
  31.         objCommand.CommandType = CommandType.Text; 
  32.         objCommand.Parameters.AddWithValue("@sUserCode", sUserCode); 
  33.         objCommand.Parameters.AddWithValue("@sPassword", sPassword); 
  34.         DataTable objDataTable = objShell.executeDataSet(ref objCommand).Tables[0]; 
  35.         objcheckuser.logined = (objDataTable.Rows.Count > 0); 
  36.         if (objcheckuser.logined) 
  37.         { 
  38.             //帐号和密码正确,反回帐号信息 
  39.             DataRow objDataRow = objDataTable.Rows[0]; 
  40.             objcheckuser.userid = objDataRow["UserID"].ToString().Trim(); ; 
  41.             objcheckuser.pass = objDataRow["Pass"].ToString().Trim(); 
  42.             objcheckuser.username = objDataRow["UserName"].ToString().Trim(); 
  43.             //检查Allow字段是否为空 
  44.             if (objDataRow.IsNull("Allow")) { objcheckuser.allow = ""; } 
  45.             else { objcheckuser.allow = objDataRow["Allow"].ToString().Trim(); } 
  46.             menulist objmenulist = new menulist(objDataRow["UserID"].ToString().Trim()); 
  47.             objcheckuser.menuxml = objmenulist.buf;//返回菜单列表的XML字符串 
  48.         } 
  49.         return objcheckuser; 
  50.     } 
  51.     public class checkuser 
  52.     { 
  53.         public bool logined; 
  54.         public string userid; 
  55.         public string pass; 
  56.         public string username; 
  57.         public string allow;  
  58.        public string menuxml;//返回菜单列表的XML字符串 
  59.     } 
  1. /*CheckLogin服务结束*/ 
  2. /*menulist 类开始*/ 
  3. using System; 
  4. using System.Data; 
  5. using System.Configuration; 
  6. using System.Web; 
  7. using System.Web.Security; 
  8. using System.Web.UI; 
  9. using System.Web.UI.WebControls; 
  10. using System.Web.UI.WebControls.WebParts; 
  11. using System.Web.UI.HtmlControls; 
  12. using System.Xml; 
  13. using Singcn.SQL; 
  14. using System.Data.SqlClient; 
  15. using System.IO; 
  16. using System.Text; 
  17. namespace myfunc.Common 
  18.     /// <summary> 
  19.     /// PubFunc 的摘要说明 
  20.     /// </summary> 
  21.     public class menulist 
  22.     { 
  23.         public XmlWriterSettings settings = new XmlWriterSettings(); 
  24.         public XmlWriter writer = null
  25.         public string buf = ""
  26.         public SqlShell objShell; 
  27.         public SqlCommand objCommand; 
  28.         public DataTable objDataTable; 
  29.         public menulist(string userid) 
  30.         { 
  31.             objShell = new SqlShell(); 
  32.             objCommand = new SqlCommand("select * from qxdmb order by jb,px,qxdm"); 
  33.             objCommand.CommandType = CommandType.Text; 
  34.             objDataTable = objShell.executeDataSet(ref objCommand).Tables[0]; 
  35.             StringWriter writerstr = new StringWriter(); 
  36.             settings.Indent = true
  37.             settings.Encoding = Encoding.GetEncoding("utf-8"); 
  38.             try 
  39.             { 
  40.                 writer = XmlWriter.Create(writerstr, settings); 
  41.                 writer.WriteStartDocument(); 
  42.                 writer.WriteStartElement("DSTreeRoot"); 
  43.                 writer.WriteAttributeString("text""后台管理系统-["+userid+"]"); 
  44.                 writer.WriteAttributeString("treeId""0000"); 
  45.                 writer.WriteAttributeString("open""true"); 
  46.                   
  47.                 readqxdmb("0"); 
  48.                 writer.WriteEndElement(); 
  49.                 writer.WriteEndDocument(); 
  50.             } 
  51.             finally 
  52.             { 
  53.                 if (writer != null
  54.                     writer.Close(); 
  55.             } 
  56.             buf = writerstr.ToString(); 
  57.             buf = buf.Replace(@"encoding=""utf-16""", @"encoding=""utf-8""");//在使用StringWriter 作为xml输出时XML自动为“utf-16”,此处用Replace方法处理,如有更好的方法请指教! 
  58.  
  59.         } 
  60.         private void readqxdmb(string sjdm)//生成XML树的方法 
  61.         { 
  62.             DataTable mytable = objDataTable.Copy(); 
  63.             DataRow[] foundRows; 
  64.             foundRows = mytable.Select("sjdm='" + sjdm + "'"); 
  65.             if (foundRows.Length > 0) 
  66.             { 
  67.                 //写子节点 
  68.                 for (int i = 0; i < foundRows.Length; i++) 
  69.                 { 
  70.                     writer.WriteStartElement("DSTree"); 
  71.                     writer.WriteAttributeString("text", foundRows[i]["qxsm"].ToString().Trim()); 
  72.                     writer.WriteAttributeString("treeId", foundRows[i]["qxdm"].ToString().Trim()); 
  73.                     writer.WriteAttributeString("open""false"); 
  74.                     //处理下级节点 
  75.                     readqxdmb((string)foundRows[i]["qxdm"]); 
  76.                     writer.WriteEndElement(); 
  77.                 } 
  78.             } 
  79.             mytable.Dispose(); 
  80.         } 
  81.     } 
  82.  
  83. /*menulist 结束*/ 
  84.   
  85. /*引用开始 */ 
  86. using System; 
  87. using System.Data; 
  88. using System.Configuration; 
  89. using System.Collections; 
  90. using System.Web; 
  91. using System.Web.Security; 
  92. using System.Web.UI; 
  93. using System.Web.UI.WebControls; 
  94. using System.Web.UI.WebControls.WebParts; 
  95. using System.Web.UI.HtmlControls; 
  96. using localhost; 
  97. public partial class _Default : System.Web.UI.Page 
  98.     protected void Page_Load(object sender, EventArgs e) 
  99.     { 
  100.     } 
  101.     protected void Button1_Click(object sender, EventArgs e) 
  102.     { 
  103.         CheckLogin objCheckLogin=new CheckLogin(); 
  104.         CheckLogin.checkuser objcheckuser = new CheckLogin.checkuser(); 
  105.         objcheckuser=objCheckLogin.Login(TextBox1.Text, TextBox2.Text); 
  106.         if (objcheckuser.logined) Label1.Text = objcheckuser.userid; 
  107.         else Label1.Text = "false"
  108.     } 
  109.  
  110. /*引用结束*/  
本站部份资源来于互联网,只供学习之用,不得用于商业,如有侵犯版权请联系告知,本站将第一时间删除!
站长QQ:373638128 邮箱:navy1015@126.com
copyright © 2008 .Net中文社区 ASPXCS.NET™.All Rights Reserved 滇ICP备08102132号