VS2008环境下开发Web Service的一些注意事项

这几天为某旅行社开发一 Web Servcie 接口,在本地进行功能实现的时候,一切都很顺利,从接到任务到实现也就只花了 1 个多小时的时间,可是在封装成 Web Servcie 的时候,一些平时不太让人注意的小地方地方耽误了近 1 天的时间。现总结一下。
       开发软件环境: Windows 2003 Ent, VS2008 Team
     1.    返回自定义class,但实际返回的倒是DataSet,即便实现了IxmlSerializable
自定义了一个 class ,因为 WebService 须要对 class 进行 xml 序列化,因此实现了 IxmlSerializable 接口,可是在客户端调用调试的时候,却发现服务返回值不是自定义的 class ,而是一个 dataset 或者 dataset[] 。通过检验,致使如此结果发现仍是在序列化的过程当中出现了问题。在实现 IxmlSerializable 的时候,使用 XmlWriter 进行 tree 结构的序列化,而后使用 XmlReader 进行反序列化, CLR 会把这个 tree 结构认为是 DataSet 序列化的结果,因此在反序列化的时候 .CLR 会把反序列化的结果转为 DataSet
若是要用 IxmlSerializable 实现自定义 class 的返回,最好使用 xml 架构文件进行验证,这样就能够实现返回的是一个 class 而不是 DataSet( 该例子能够在 msdn 上找到 )
    2.    没法返回自定义class,即便对class申明了[Serializable]
因为使用 IxmlSerializable 进行返回自定义 class 会比较麻烦,因此改用了 [Serializable] 进行实现。可是在实际中依然没法返回 class 。怎么回事呢?后来才发现,漏写了一个无参构造函数。在 .NET 开发 Web Service 中,序列化机制须要调用一个无参构造函数来序列化和反序列化对象,并且这个无参构造函数最好显式声明。记得在 .NET1.1 下的时候,没有显式申明无参构造函数的时候会出现异常提示,可是在 .NET2.0 之后却没有了。
在显示声明无参构造函数后,能够返回自定义 class 了,可是有些 public 属性依然没法进行序列化。怎么回事呢?原来对于只有 get 功能的属性, .NET [Serializable]Attribute 的序列化机制依然没法对之进行序列化 。可是在实际状况中, class 的一些字段只能是 get 不能是 set ,该如何解决?
     3.    序列化只有get功能的public property
     对于只有 get 功能的 public property ,解决的最简单的方法就是定义个 set 空实现。即
public string Air
{
get{retrun _air;}
set{}
}
     4.    没法进行远程调试。
            在默认状况下, VS05 之后上开发的 Web Servcie 默认状况下是不支持远程调试的。在调试页面上会显示以下信息:
          
           对于该问题,只须要在 Web.config 文件中的 <system.web> 节点下加入以下信息:
       <webServices>
            <protocols>
                  <add name="HttpGet"/>
                 <add name="HttpPost"/>
                 <add name="HttpSoap"/>
                 <add name="Documentation"/>
           </protocols>
   </webServices>
            其中的 < protocols > 节点指定了 ASP.NET Web 服务可用来接收从客户端发送来的请求数据和返回响应数据的协议。
       5.部署的时候出现"服务器应用程序不可用"
               Web Service是用VS2008开发的,使用了LINQ TO XML和LINQ TO SQL,可是部署机子上是.NET2.0的环境,因此在服务器上装了.NET 3.5的Framework。测试的时候,却出现了“服务器应用程序不可用”。这个错误貌似在ASP.NET部署的时候常见问题。先使用 aspnet_regiis进行从新注册,可是错误依旧。后来,对虚拟目录指向的程序文件夹加入以下用户问题获得解决:
          ASP.NET          IIs_WPG          Internet来宾账户         System
相关文章
相关标签/搜索