//*******************************
using System;
using System.Collections;
using Microsoft.Data.Odbc;
namespace JDEFoundationInterface
{
/// <summary>
/// dsF0010Container 的摘要说明。
/// </summary>
public class dsF0010Container
{
private dsF0010[] mdsF0010s;
public dsF0010Container(string SQL)
{
//
// TODO: 在此处添加构造函数逻辑
//
// 建立数据库连接,执行SQL语句,获得DataReader
OdbcConnection  conn = null;
conn=DBConnection.GetConnection();
OdbcCommand cmd = new OdbcCommand(SQL);
cmd.Connection = conn;    
conn.Open();
OdbcDataReader reader = cmd.ExecuteReader();

//将DataReader中的数据实例化DataStructure,并放入ArrayList
ArrayList list=new ArrayList();
while (reader.Read()) 
{
list.Add(new dsF0010(reader));
}
//关闭数据库连接
reader.Close();
conn.Close();
//获得将ArrayList中的Object个数,定义数组大小,并给数组赋初值。
dsF0010[] temp_dsF0010s = new dsF0010[list.Count];
int i=0;
foreach(object obj in list)
{
temp_dsF0010s[i]=(dsF0010)obj;
i++;
}
mdsF0010s=temp_dsF0010s;
} public dsF0010[] dsF0010s
{
get
{
return mdsF0010s;
}
}
}
}

解决方案 »

  1.   

    //******************************************
    using System;
    using Microsoft.Data.Odbc;
    using System.Collections;
    namespace JDEFoundationInterface
    {
    /// <summary>
    /// mainInterface 的摘要说明。
    /// </summary>
    public class mainInterface
    {
    public static dsF0010[] GetCompany(string[] cos)
    {
    //生成查询SQL语句
    string SQL = "SELECT * FROM F0010";

    dsF0010Container container = new dsF0010Container(SQL);
    return container.dsF0010s;
    }
    }
    }//***********************************
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Web;
    using System.Web.Services;
    using JDEFoundationInterface;
    namespace WebService1
    {
    /// <summary>
    /// Service1 的摘要说明。
    /// </summary>
    /// 
    [WebService(Namespace="http://xnm/WebService1/",
     Description="A temperature conversion service.")] public class Service1 : System.Web.Services.WebService
    {
    public Service1()
    {
    //CODEGEN:该调用是 ASP.NET Web 服务设计器所必需的
    InitializeComponent();
    } #region Component Designer generated code

    //Web 服务设计器所必需的
    private IContainer components = null;

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    } /// <summary>
    /// 清理所有正在使用的资源。
    /// </summary>
    protected override void Dispose( bool disposing )
    {
    if(disposing && components != null)
    {
    components.Dispose();
    }
    base.Dispose(disposing);
    }

    #endregion // WEB 服务示例
    // HelloWorld() 示例服务返回字符串 Hello World
    // 若要生成,请取消注释下列行,然后保存并生成项目
    // 若要测试此 Web 服务,请按 F5 键 [WebMethod]
    public string HelloWorld()
    {
    return "Hello World";
    }
    [WebMethod]
    public string HelloWorld2()
    {
    return "Hello World2";
    }
    [WebMethod]
    public JDEFoundationInterface.dsF0010[] getF0010()
    {
    return JDEFoundationInterface.mainInterface.GetCompany(null);
    }
    }
    }打开web service的页面的时候 措无提示如下:
    “/WebService1”应用程序中的服务器错误。
    --------------------------------------------------------------------------------JDEFoundationInterface.dsF0010 无法序列化,因为它不具有默认的公共构造函数。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: JDEFoundationInterface.dsF0010 无法序列化,因为它不具有默认的公共构造函数。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
    [InvalidOperationException: JDEFoundationInterface.dsF0010 无法序列化,因为它不具有默认的公共构造函数。]
       System.Xml.Serialization.TypeScope.ImportTypeDesc(Type type, Boolean canBePrimitive, Boolean throwOnNoDefaultCtor, MemberInfo memberInfo) +2134
       System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo source, Boolean throwOnDefaultCtor) +56
       System.Xml.Serialization.TypeScope.ImportTypeDesc(Type type, Boolean canBePrimitive, Boolean throwOnNoDefaultCtor, MemberInfo memberInfo) +1386
       System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo source, Boolean throwOnDefaultCtor) +56
       System.Xml.Serialization.XmlReflectionImporter.ImportMemberMapping(XmlReflectionMember xmlReflectionMember, String ns, XmlReflectionMember[] xmlReflectionMembers) +36
       System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement) +300[InvalidOperationException: 反射“getF0010Result”时出错。]
       System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(XmlReflectionMember[] xmlReflectionMembers, String ns, Boolean hasWrapperElement) +607
       System.Xml.Serialization.XmlReflectionImporter.ImportMembersMapping(String elementName, String ns, XmlReflectionMember[] members, Boolean hasWrapperElement) +108
       System.Web.Services.Protocols.SoapReflector.ImportMembersMapping(XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, Boolean serviceDefaultIsEncoded, Boolean rpc, SoapBindingUse use, SoapParameterStyle paramStyle, String elementName, String elementNamespace, Boolean nsIsDefault, XmlReflectionMember[] members, Boolean validate) +169
       System.Web.Services.Protocols.SoapReflector.ReflectMethod(LogicalMethodInfo methodInfo, Boolean client, XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, String defaultNs) +2671[InvalidOperationException: 无法反射方法 Service1.getF0010。]
       System.Web.Services.Protocols.SoapReflector.ReflectMethod(LogicalMethodInfo methodInfo, Boolean client, XmlReflectionImporter xmlImporter, SoapReflectionImporter soapImporter, String defaultNs) +5390
       System.Web.Services.Description.SoapProtocolReflector.ReflectMethod() +43
       System.Web.Services.Description.ProtocolReflector.ReflectBinding(ReflectedBinding reflectedBinding) +1015
       System.Web.Services.Description.ProtocolReflector.Reflect() +506
       System.Web.Services.Description.ServiceDescriptionReflector.Reflect(Type type, String url) +530
       System.Web.Services.Protocols.DocumentationServerType..ctor(Type type, String uri) +156
       System.Web.Services.Protocols.DocumentationServerProtocol.Initialize() +273
       System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) +106[InvalidOperationException: 无法处理请求。]
       System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing) +204
       System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +82[InvalidOperationException: 未能处理请求。]
       System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +154
       System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +34
       System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, String path, String pathTranslated, Boolean useAppConfig) +174
       System.Web.MapHandlerExecutionStep.Execute() +77
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +173 该问题解决后 ,另赠送100分
      

  2.   

    不用贴那么长,答案很简单,webservice不允许传递自定义类型,只允许有限的类型,比如string型/数值型/byte[] 型/datetable 型等,自己查下MSDN,举个例子:[WebMethod]
    public System.IO.FileInfo HelloWorld1() {
    return new System.IO.FileInfo("C:\\1.txt");
    }这个代码就出错了,因为 fileinfo 不能做为参数传送,它无法序列化
      

  3.   

    不太对吧~~~
    我知道java的WebService是可以传递自定义类型的,也就是ComplexType 不过要符合一定的规范而已。
      

  4.   

    上面说错了,datetable 也不允许允许类型大约为:string char 全部数值型 datetime guid class 结构 xmlnode dateset
      

  5.   

    不是我不信,是我自己做的JAVA的WEBSERVICE很成功,绝对不可能只能传递象STRING 数字这样的类型
      

  6.   

    .net 的webservice 是基于xml 的,它不接受无法序列化的交换内容你要可以试试使用远程对象我就不多说了,你闲着的话就再等等有没有别的答案
      

  7.   

    c ofhttp://chs.gotdotnet.com/quickstart/aspplus/doc/webservicetypes.aspx
      

  8.   

    谢谢Arli2003的文档 http://chs.gotdotnet.com/quickstart/aspplus/doc/webservicetypes.aspx
      

  9.   

    晕我以为你是想传送你自己的类型对象,那是不行的,除了标准交换类型,其它的必须定义序列化,你的代码那么长我没去瞧,只是根据错误信息推断的,你可以c of: http://chs.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/services/DataTypes/DataTypes.src