对消息 的正文进行序列化时出错: “生成 XML 文档时出错
web 服务代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using JS.Data.Model;
using JS.Data.Bll;
using Air.Com.ErroLog;
using Air.Com.Hash;
using System.Windows.Forms;
namespace JSsys.Service
{
/// <summary>
/// DocService 的摘要说明
/// </summary>
[WebService(Namespace = "http://www.uritsoft.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class JSService : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
public void ReadPermission(object sender, string xmlfilename)
{
if (!CheckLogin()) return;
js_doc docmodel = GetSessionInfo();
try
{
//调用JS.XML.SetPermissionXml的ReadPermission函数,实现从xml文件中读取一个主窗体的权限
JS.XML.SetPermissionXml.ReadPermission((Form)sender, xmlfilename);
return;
}
catch (Exception ex)
{
WriteLog(ErroLog.ErroType.ReadXml, ex.Message, docmodel.doc_id);
}
}
JS.XML的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using Air.Com.Config;
namespace JS.XML
{
//从xml文件中读取各个控件的权限并在main加载时执行
public class SetPermissionXml
{
public static void ReadPermission(Form Sender, string XMLFilename)
{
bool isExist = false;
Air.Com.Config.XMLControl.CreatXMLFile(ref XMLFilename); //创建
XmlDocument doc = XMLControl.loadXMLDocument(XMLFilename,out isExist); //加载创建的xml文件,并返回是否加载成功
if (!isExist)
{
return; //加载不成功返回
}
ReadPermission(Sender, "//Permission", doc);
}
/// <summary>
/// 从Form读取各个控件
/// </summary>
/// <param name="Sender"></param>
/// <param name="p">xml的根节点</param>
/// <param name="doc">加载的xml文件</param>
private static void ReadPermission(Form Sender, string Permission, XmlDocument doc)
{
XMLControl.Attributes attr = new XMLControl.Attributes();
attr.name = "Name";
attr.value = Sender.Name; //取mainForm的Name属性
XmlNode root = Air.Com.Config.XMLControl.FindNode(doc, Permission + "/" + "Form", attr);//根据传来的form属性,在xml中寻找该form
if (root != null) //找到该根节点
{
Sender.Enabled = Convert.ToBoolean(root.Attributes["Enabled"].Value); //将xml文件中该节点的“Enabled”的值(false 或者 true)赋给 Form的“Enabled”属性
}
if (Sender.Controls.Count > 0)
{
foreach (Control ctr in Sender.Controls)
{
string type = ctr.GetType().Name;
switch (type)
{
case"ToolStrip":
ReadPermission((ToolStrip)ctr, Permission + "/" + root.Name, doc);
break;
case"MenuStrip":
ReadPermission((MenuStrip)ctr, Permission + "/" + root.Name, doc);
break;
default:
ReadPermission(ctr, Permission + "/" + root.Name, doc);
break;
}
}
}
}
//*********************************************************************************
private static void ReadPermission(ToolStrip Sender, string rootPath, XmlDocument doc)
{
XMLControl.Attributes attr = new XMLControl.Attributes();
attr.name = "Name";
attr.value = Sender.Name;
XmlNode node = Air.Com.Config.XMLControl.FindNode(doc, rootPath + "/" + Sender.GetType().Name, attr);
if (node != null)
{
Sender.Enabled = Convert.ToBoolean(node.Attributes["Enabled"].Value);
}
if (Sender.Items.Count > 0)
{
foreach (ToolStripItem tsi in Sender.Items)
{
ReadPermission( tsi, rootPath + "/" + node.Name, doc);
}
}
}
private static void ReadPermission(ToolStripItem Sender, string rootPath, XmlDocument doc)
{
XMLControl.Attributes attr = new XMLControl.Attributes();
attr.name = "Name";
attr.value = Sender.Name;
XmlNode node = Air.Com.Config.XMLControl.FindNode(doc, rootPath + "/" + Sender.GetType().Name, attr);
if (node != null)
{
Sender.Enabled = Convert.ToBoolean(node.Attributes["Enabled"].Value);
}
}
//**************************************************************************************************
private static void ReadPermission(MenuStrip Sender, string rootPath, XmlDocument doc)
{
XMLControl.Attributes attr = new XMLControl.Attributes();
attr.name = "Name";
attr.value = Sender.Name;
XmlNode node = Air.Com.Config.XMLControl.FindNode(doc, rootPath + "/" + Sender.GetType().Name, attr);
if (node != null)
{
Sender.Enabled = Convert.ToBoolean(node.Attributes["Enabled"].Value);
}
if (Sender.Items.Count > 0)
{
for (int i = 0; i < Sender.Items.Count; i++)
{
if (Sender.Items[i].GetType().Name == "ToolStripSeparator")
continue;
else
ReadPermission((ToolStripMenuItem)Sender.Items[i], rootPath + "/" + node.Name, doc);
}
}
}
private static void ReadPermission(ToolStripMenuItem Sender, string rootPath, XmlDocument doc)
{
XMLControl.Attributes attr = new XMLControl.Attributes();
attr.name = "Name";
attr.value = Sender.Name;
XmlNode node = Air.Com.Config.XMLControl.FindNode(doc, rootPath + "/" + Sender.GetType().Name, attr);
if (node != null)
{
Sender.Enabled = Convert.ToBoolean(node.Attributes["Enabled"].Value);
}
if(Sender.DropDownItems.Count > 0)
{
for (int i = 0; i < Sender.DropDownItems.Count; i++)
{
if (Sender.DropDownItems[i].GetType().Name == "ToolStripSeparator")
continue;
else
ReadPermission((ToolStripMenuItem)Sender.DropDownItems[i], rootPath + "/" + node.Name, doc);
}
}
}
}
}
客户端 应用程序代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Serialization;
using JSsys.App.JSService;
namespace JSsys.App
{
public partial class MainForm : Form
{
JSService.JSServiceSoapClient soapclient;
string username="未登录用户";
string LoginUserID;
public MainForm()
{
InitializeComponent();
}
public MainForm(JSService.JSServiceSoapClient soapclient,string loginuserid)
{
this.soapclient = soapclient;
LoginUserID = loginuserid;
InitializeComponent();
}
/// <summary>
/// 加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_Load(object sender, EventArgs e)
{
js_doc docmodel;
try
{
docmodel = soapclient.GetSessionInfo();
username = docmodel.doc_name;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message );
}
try
{
soapclient.KeepOnline();
statusStrip.Items[0].Text = username + "登陆中";
statusStrip.Items[0].Enabled = true;
}
catch
{
statusStrip.Items[0].Text = username + "已经掉线";
statusStrip.Items[0].Enabled = false;
}
try
{
//执行到这句就报错了“对消息 的正文进行序列化时出错: “生成 XML 文档时出错”
soapclient.ReadPermission(this, "XMLFile1.xml");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
timer.Start();
}
我单独在客户端调用JS.XML里面的代码 程序正常运行 但是通过web调用后就出现问题了