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

你可能感兴趣的:(Web,开发,service,环境,事项)