详细内容
Web Services 中重载方法报错解决办法
发布日期:2010-05-14     点击:3167     字体:[ ]

 [WebService(Namespace ="http://www.zdbase.com/")]
 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 public class WebService1 : System.Web.Services.WebService
 {
        [WebMethod()]
        public int Add(int a, int b)
        {
            return a + b;
        }

        [WebMethod()]
        public int Add(int a, int b, int x)
        {
            return a + b + x;
        }
}

生成后。在另一个解决方案或工程中调用上面的 Services 会报错。

肉容如下:

Int32 Add(Int32, Int32, Int32) 和 Int32 Add(Int32, Int32) 同时使用消息名称“Add”。使用 WebMethod 自定义特性的 MessageName 属性为方法指定唯一的消息名称

我然后改了方法名再测试。引用成功。测试通过。

究竟是什么原因会使出现上面的错误呢??

原来,必须在类中指示不支持1.1标准并且在方法中指定MessageName来创建唯一的别名。可以这样来解决,如下所示,这样在客户端调用时,就可以调用WebService不同的重载方法了。

 [WebService(Namespace ="http://www.zdbase.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
public class WebService1: System.Web.Services.WebService
{
        [WebMethod(MessageName= "first")]
        public int Add(int a, int b)
        {
            return a + b;
        }

        [WebMethod(MessageName= "stow")]
        public int Add(int a, int b, int x)
        {
            return a + b + x;
        }

}

解释一下:

WebServiceBindingAttribute.ConformsTo 属性:获取或设置绑定声称所符合的 Web 服务互操作性 (WSI) 规范。

枚举WsiProfiles:

    WsiProfiles.None: 表示 Web 服务未提出任何一致性声称。

    WsiProfiles.BasicProfile1_1: 表示 Web 服务声称符合“WSI 基本概要”1.1 版。

WebMethodAttribute.MessageName 属性:在传递到 XML Web services 方法和从 XML Web services 方法返回的数据中用于 XML Web services 方法的名称。默认值是 XML Web services 方法的名称。 另外,MessageName 属性可用于为方法或属性名创建别名MessageName 属性 (Property) 最常用来唯一标识多态方法。默认情况下,MessageName 设置为 XML Web services 方法的名称。因此,如果 XML Web services 包含两个或更多同名的 XML Web services 方法,则可唯一确定各个 XML Web services 方法,处理方法是将 MessageName 设置为 XML Web services 内的唯一名称,而不用在代码中更改实际方法的名称。数据在传递到 XML Web services 时通过请求发送,而在返回时则通过响应发送。在请求和响应中,用于 XML Web services 方法的名称是其 MessageName 属性 (Property)。与 XML Web services 方法关联的消息名称必须在 XML Web services 内是唯一的。如果在客户端调用初始方法后添加同名但具有不同参数的新 XML Web services 方法,则应为新方法指定不同的消息名称,但应原样保留初始消息名称,以确保与现有客户端兼容。

WebMethodAttribute的属性详细如下图所示:

属性 功能 示例
BufferResponse设置为True时,XML Web服务的响应就保存在内存中,并发送为一个完整的包。如果该属性设置为False,则响应在服务器上构造的同时,会发送给客户机。[WebMethod(BufferResponse=true)]
CacheDuration指定响应在系统的高速缓存中的保存时间(秒),默认值为0,表示禁用高速缓存。把XML Web服务的响应放在高速缓存中,会提高Web服务的性能。    [WebMethod(BufferResponse=true,CacheDuration=30)]
Description对在XML Web服务的测试页面上显示的Web Method应用文本的描述。[WebMethod(Description="该方法用于获取一个简单的字符串")]
EnableSession设置为True时,会激活Web Method的会话状态,其默认值为False。[WebMethod(EnableSession=true)]
MessageName给Method指定一个唯一的名称,如果要使用重载的Web Method,则必须指定。[WebMethod(MessageName="Method1")]
TransactionOption为Web Method指定事务的支持,其默认值为Disbled。如果Web Method是启动事务的根对象,Web服务就可以用另一个需要事务处理的WebMethod参与事务处理。其值可以是NotSupported、Supported、Required和RequiresNew。
用户评论
昵称 
内容  *
验证码   
   
相关文章 更多...  
Copyright © 2010 zdbase.com All Rights Reserved. 苏ICP备15039389号 可人软件设计