原代码如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.Linq;
using System.Configuration;
using System.Web.Security;
using System.Web.Services;
using System.Web.Services.Protocols;
using ORShopping;namespace ShoppingWebService
{
    /// <summary>
    /// Shopping 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class Shopping : System.Web.Services.WebService
    {
        public Shopping()
        {
        
        }        private static ORShoppingDataContext db = new ORShoppingDataContext();
        public Credentials token = new Credentials();
                [WebMethod(Description = "根据Uid获取ShopRecordData以及Files,返回一个DataSet")]
        [SoapHeader("token", Direction = SoapHeaderDirection.In)]
        public List<ShopRecordData> GetShopRecordData(string uid, string type)
        {
            if (token.pwd != ConfigurationManager.AppSettings["pwd"])
                return null;            //List<ShopRecordData> list = new List<ShopRecordData>();
            if (type == "Max")
            //查询最新版本
            {
                var q =
                     from s in db.ShopRecordData
                     where s.Uid == uid && s.RecordState == 1
                     select s;                return q.ToList<ShopRecordData>();                //foreach (var item in q)
                //{
                // list.Add(item);
                //}                               }
            else if (type == "All")
            //查询历史版本
            {
                var q =
                    from s in db.ShopRecordData
                    where s.Uid == uid && s.RecordState != 1
                    select s;
                return q.ToList<ShopRecordData>();
                //foreach (var item in q)
                //{
                //    list.Add(item);
                //}     
            }
            return null;        }
       
    }
}
返回的错误如下:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------System.Data.Linq.Binary 无法序列化,因为它没有无参数的构造函数。  
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。  异常详细信息: System.InvalidOperationException: System.Data.Linq.Binary 无法序列化,因为它没有无参数的构造函数。

解决方案 »

  1.   

    我仔细看了一下您的程序,可能出在web method GetShopRecordData 的返回类型上,我记得我以前也犯过同样的错误,编译的时候,如果泛型种类不支持序列化就报错,你尝试查一下List<ShopRecordData> 这个类型是否支持序列化,如果不可以,请调整为实体的数组代替,或其他方式。
      

  2.   

    web servier 好像不是支持集合的!!只能用数组!
      

  3.   

    GetShopRecordData 
    我也觉得问题可能在这里,但不知如何解决。
    不知各位有没有碰到这种情况?谢谢!
      

  4.   

    public List<ShopRecordData> GetShopRecordData改成返回DataSet
      

  5.   

    谢谢各位的回复,LINQ实体可能不支持直接实例化,我是通过下面这篇文章解决的:
    http://www.cnblogs.com/kchen/archive/2006/11/04/550382.html
    在此也要感谢这篇文章的作者。
    问题已经解决了。