正 文

为什么webservice里无法使用Page做参数


www.7dspace.com  更新日期:2005-12-10 3:23:42  七度空间


  我希望用webservice在参数指定的页面注册js代码,代码如下:

[WebMethod]

public void  regClickScript(System.Web.UI.Page _page)
{
String scriptString = "<script language=JavaScript> function DoClick() {";
scriptString += "myForm.show.value='Welcome to Microsoft .NET'}<";
scriptString += "/";
scriptString += "script>";

if(!_page.IsClientScriptBlockRegistered("clientScript"))
_page.RegisterClientScriptBlock("clientScript", scriptString);
}

  编译没有问题,但是运行service页面会报如下错误:

  类型“System.Web.UI.Control”上的属性“ClientID”无法序列化,因为它是用说明性安全权限属性修饰的。请考虑在属性访问器中使用命令性断言或请求。如果我不使用webservice只是作为普通方法就没有问题,难道webservice不能接受Page作为参数么?

  是的,不可能,凡是无法序列化得对象都无法作为webservice的参数或者返回值.webservice本身是不是什么页面的东西,它只是个访问点而已,运行时出现的页面是.NET给方便调试而生成的....

  webservice为什么可以在网络上传送对象? 这有赖于.net提供的两种“序列化”的方法,它可以他对象转换成soap或者xml的格式,只有这样对象才可以传送并还原.

  自定义的类,可以添加[Serializable]标签让它“可序列化”,但是如果类中包含了任何不可序列化的成员(例如控件的ClientID属性),那么它就是“不可序列化”,所以,Page是不可能的。


上一篇:为什么我用dom4j写文件写不进去?
下一篇:利用StrutsTestCase测试Struts应用程序
作者:  来源:csdn ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐