首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

WebService与List解决方法

2012-01-16 
WebService与List在WebService定义一个List集合参数,为什么到了客户端引用的时候就成了一个数组呢?错误1与

WebService与List
在WebService定义一个List集合参数,为什么到了客户端引用的时候就成了一个数组呢?
错误1与“Eis.Portal.Isdk.IAccess.ExecuteDataTable(string, Eis.Portal.Isdk.CommandType, string, Eis.Portal.Isdk.ListPara[])”最匹配的重载方法具有一些无效参数E:\Web\EIS\EisPortal\Default.aspx.cs7144EisPortal
 

C# code
 private void LoadUser()        {            try            {                                          strSQL = "SELECT * FROM LoginUser where UserName like @UserName and password like @password";                IAccess access = new IAccess();                             List<ListPara> list = new List<ListPara>();                ListPara lp = new ListPara();                lp.para = "UserName";                lp.value = "A";                list.Add(lp);                lp.para = "Password";                lp.value = "123456";                list.Add(lp);                //list.Add(new ListPara("UserName", "A"));                //list.Add(new ListPara("Password", "123456"));                 System.Data.DataTable dt = access.ExecuteDataTable(guid, Eis.Portal.Isdk.CommandType.Text, strSQL,list);//List集合???                this.gvUser.DataSource = dt;                this.gvUser.DataBind();            }            catch (Exception ex)            {                throw ex;            }        }

WebService代码
C# code
namespace EIS.ISdk{    /// <summary>    /// IAceess 的摘要说明    /// </summary>    [WebService(Namespace = "http://eissdk.org/")]    [WebServiceBinding(ConformsTo = WsiProfiles.None)]    [System.ComponentModel.ToolboxItem(false)]    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。    // [System.Web.Script.Services.ScriptService]    public class IAccess : System.Web.Services.WebService    {        [WebMethod(MessageName = "ExecuteDataTable", Description = "Return Execute Data Table")]        public DataTable ExecuteDataTable(string guid, CommandType cmdType, string cmdText)        {            if (LoginAuth.GuidAuth(guid))            {                List<ListPara> list = new List<ListPara>();                                list.Add(new ListPara("UserName", "A"));                list.Add(new ListPara("Password", "123456"));                 return SqlHelper.ExecuteDataTable(cmdType, cmdText, SqlHelper.GetParameters(list));            }            else            {                return null;            }        }        [WebMethod(MessageName = "ExecuteDataTable2", Description = "Return Execute Data Table")]        public DataTable ExecuteDataTable(string guid, CommandType cmdType, string cmdText,List<ListPara> list)        {            if (LoginAuth.GuidAuth(guid))            {                  return SqlHelper.ExecuteDataTable(cmdType, cmdText, SqlHelper.GetParameters(list));            }            else            {                return null;            }        }}


[解决办法]
参数当然不匹配了,你看看你的WebService里ExecuteDataTable这2个重载的方法,及其内部使用的ExecuteDataTable方法,参数类型严重不匹配。

你仔细看看。
[解决办法]
你用的自动生成代码所以他会变成Array
你将客户端的返回改成List<T> 返回值部份强制转换就可以了。比较郁闷的是每次必须改。

[解决办法]
不能很好的利用系统的autoupdate功能。
我用的是spring.net做的代理,发布的服务继承一个接口,spring.net可以为我们动态生成一个webservice代理。
[解决办法]
DataSet尽量不要考虑用,因为DataSet只在微软环境可以序列化反序列化。

热点排行