初学Web Service,问题可能很幼稚,请谅解.....1. 如果Web Service 传入和返回的参数为自定义对象类型,那么客户端引用的时候,怎么使用这个对象啊?是否需要提供Web Service的那一方提供这个对象的代码给使用者啊?如果使用者是使用JAVA语言的?怎么处理?2. Web Service 在使用的时候,一般都是添加Web 引用和用JS解析吗?还有什么其他的常用方式吗?3. Web Service在添加引用的时候是使用的SOAP吧?那什么时候使用Http GET/POST 啊?还是基本不使用后两者?这三者有什么区别呢?4. Web Service在使用时如何注意性能问题?5. 如果客户端在请求一个Web Service的时候一直处于请求状态,就死在那了,客户端应该如何进行这种异常处理?谢谢!!!!!!!!!

解决方案 »

  1.   

    XML Web 服务类型封送处理
    本节阐释可以给 Web 服务方法传递和从 Web 服务方法返回各种数据类型。由于 XML Web 服务实现建立在 XML 序列化结构之上,因此它支持相当多的数据类型。下表列出了在使用 SOAP 协议(例如,使用由 Web 服务描述语言工具 WSDL.exe 生成的代理)时 Web 服务方法支持的数据类型。 值 说明 
    基元类型 标准基元类型。 受支持的基元类型的完整列表是 String、Char、Byte、Boolean、Int16、Int32、Int64、UInt16、UInt32、UInt64、Single、Double、Guid、Decimal、DateTime (与 XML 的 timeInstant 一样)、DateTime(与 XML 的 date 一样)、DateTime(与 XML 的 time 一样)和 XmlQualifiedName(与 XML 的 QName 一样)。  
    枚举类型 枚举类型,例如“public enum color { red=1, blue=2 }” 
    基元数组,枚举 上述基元类型的数组,如 string[] 和 int[] 
    类和结构 具有公共字段或属性的类和结构类型。 公共属性和字段已序列化。 
    类数组(结构) 上述类型的数组。 
    数据集 ADO.NET }数据集类型(有关示例,请参阅下一节)。 数据集也可以字段的形式出现在结构或类中。 
    注意:Microsoft Visual Studio .NET 和 XSD.EXE SDK 实用工具支持数据集具有强类型。这些工具生成一个类,该类从数据集继承以产生 DataSet1,并添加若干特定于具体某个 XML 架构的方法/属性/其他对象。如果您传递数据集,XML Web 服务始终将架构与数据(这样它就知道您正在传递的表和列)及其类型(如 int、string 类型)一起传输。如果您传递数据集的一个子类(如 DataSet1),则 XML Web 服务假定您正在构造函数中添加表/列,并假定这些表 /列表示您的架构。 
     
    数据集数组 上述类型的数组。 
    XmlNode XmlNode 是 XML 段在内存中的表示形式(类似轻量 XML 文档对象模型)。例如 “<comment>This is<b>pretty</b> neat</comment>” 可以存储在 XmlNode 中。可以将 XmlNodes 作为参数传递,这些参数将添加到以 SOAP 兼容方式传递到 XML Web 服务的 XML 的其余部分(其他参数)。返回值同样如此。这使您可以传递或返回结构随调用改变的 XML,或者可能不知道正在传递的所有类型的 XML。XmlNode 也可以字段的形式出现在结构或类中。  
    XmlNode 的数组 上述类型的数组。 
    返回值:
    不论是使用 SOAP 还是 HTTP GET/POST 来调用 XML Web 服务,返回值都支持上述所有类型。 参数:当使用 SOAP 协议时,按值参数和按引用参数 (in/out) 都受支持。按引用参数可以沿两个方向发送值:向上发送到服务器和向下发送回客户端。当使用 HTTP GET/POST 将输入参数传递给 XML Web 服务时,只支持一组有限的数据类型,并且它们必须是按值参数。HTTP GET/POST 参数支持的类型在下面列出: 
    类型 说明 
    基元类型(有限) 大多数标准基元类型。受支持的基元类型的完整列表是 Int32、String、Int16、Int64、Boolean、Single、Double、Decimal、DateTime、UInt16、UInt32、UInt64 和 Currency。从客户端的角度看,所有这些类型都转换为 string。  
    枚举类型 枚举类型,例如“public enum color { red=1, blue=2 }”。从客户端的角度看,枚举变成每个值都有静态常数字符串的类。  
    基元数组,枚举 上述基元类型的数组,如 string[] 和 int[] 
      

  2.   

    XDvlper(XDeveloper) ( ) 信誉:100thx ... 
      

  3.   

    5. 如果客户端在请求一个Web Service的时候一直处于请求状态,就死在那了,客户端应该如何进行这种异常处理?
    可以用异步调用web service来解决这个问题
      

  4.   

    to 1在.net之间进行调用,那么在webservice端要进行序列化,调用端即可直接用;
    如果在.net与其他语言之间,就比较麻烦了,需要自己去分析,然后进行转化。
      

  5.   

    to 2.调用webservice,可以像c#中那样进行web引用,也可以去js分析,甚至可以用socket去连接。也就是说你只要了解了soap协议,以及webservice所提供的方法,怎么进行调用,系统并不强求。不过用c#来进行调用进行web引用是最方便的。
      

  6.   

    to 3如果是通过web引用过来,就不用再考虑Http GET/POST,因为这部分系统已经帮你做了。
    如果你想看这部分如何实现,可以查看引用后生成的reference.cs文件。
      

  7.   

    webservice端要进行序列化
    自定义对象类型客户端需要引用
      

  8.   

    to 4. Web Service在使用时如何注意性能问题?
    5. 如果客户端在请求一个Web Service的时候一直处于请求状态,就死在那了,客户端应该如何进行这种异常处理?如果数据量大的话,可以异步调用web service。
      

  9.   

    1.不管是不是自定义的类型,能够序列化和反序列化就能够放在WebService传递,当然双方都要有该对象的代码或者dll。如果是和其他语言混合调用,那就需要设计其他语言的序列化、反序列化支持了。2.任何语言都可以调用WebService,不过你在ASP.NET版问,当然告诉你最常见的就是服务器端(.NET语言)调用或者客户端Javascript调用啦。3.如果你使用服务器端调用,或者客户端调用用Atlas封装好的Javascript,能够直接获取调用结果的数据类型,无须考虑中间过程。4.因为这是需要经过网络的调用,所以最好适当考虑使用缓存。5.可以使用异步调用。