在Web服务中重载方法时出错

时间:2013-08-30 05:05:49

标签: c# web-services web-config asmx

我已经看到并通过了this site但最终出现了错误

enter image description here

在服务中我有网络方法

[WebMethod(MessageName = "AddWithMoreParam",Description="More parameters", EnableSession=true)]
public bool UpdateMovies(string userName, string role, string movieName, string releaseDate)
{        
    BlogController con = new BlogController();
    BlogInfo info=new BlogInfo();
    info.MovieName=movieName;
    info.ReleaseDate=releaseDate;
    return con.UpdateMovies(info);        
}


[WebMethod(MessageName = "AddWithLessParam", Description = "Less parameters", EnableSession = true)]
public bool UpdateMovies(string movieName, string releaseDate)
{
    BlogController con = new BlogController();
    BlogInfo info = new BlogInfo();
    info.MovieName = movieName;
    info.ReleaseDate = releaseDate;
    return con.UpdateMovies(info);
}

问题可能与webservicebinding有关,但我对此感到困惑,无法继续。

3 个答案:

答案 0 :(得分:2)

您无法真正超载Web服务操作。用于描述SOAP Web服务(WSDL和XSD)的语言没有重载概念。

通过设置MessageName属性的WebMethod属性,您有时可以使用黑客攻击。但是,这会破坏WS-I BP1合规性,因为您的错误消息明确指出。 WS-I BP1禁止使用这种“重载”,因为并非所有Web服务堆栈都支持它。

解决方案是放弃并为每种方法使用不同的名称。

仅供参考,SOAP也没有其他编程语言结构的概念,如默认参数,索引器,泛型,枚举等。它不是面向对象的,所以不要停留在使用面向对象的概念或概念最喜欢的编程语言当然,这些可以用于服务的实现,但不能用于它的定义。

答案 1 :(得分:0)

您需要使用新名称创建方法。您可以在webservices中编写和编译重载方法,但是当生成WSDL时它将无法工作。有一种替代方法可以实现这一目标,其中描述了here

答案 2 :(得分:0)

您需要从Web服务中删除[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]