接下来只需要将方法调用写到具体的函数里面就可以了。当然不能忘记了使用WebMethod特性。
[WebService(Namespace = "
http://tempuri.org/";)]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloWebService : System.Web.Services.WebService, Hello.IHelloLogic
{
HelloLogic logic = new HelloLogic();
IHelloLogic Members#region IHelloLogic Members
[WebMethod]
public string SayBye()
{
return logic.SayBye();
}
[WebMethod]
public string SayHello()
{
return logic.SayHello();
}
[WebMethod]
public string SayHello(string name)
{
return logic.SayHello(name);
}
#endregion
}
现在的代码已经可以编译通过了,但是有一个问题那就是在一般类方法中可以使用函数名重载,但是Web服务不能使用,我们这里对SayHello方法的重载需要进行修改。那么怎么实现Web服务下的函数重载拉?那就要用到MessageName属性对方法进行重命名了。使用MessageName 属性后还没有完,[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]这里的标注使得该Web服务不符合 WS-I Basic Profile v1.1,需要将属性值改为WsiClaims.None。最终完成的代码应该是:
using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using Hello;
/**//// <summary>
/// Summary description for HelloWebService
/// </summary>
[WebService(Namespace = "
http://tempuri.org/";)]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
public class HelloWebService : System.Web.Services.WebService, Hello.IHelloLogic
{
HelloLogic logic = new HelloLogic();
IHelloLogic Members#region IHelloLogic Members
[WebMethod]
public string SayBye()
{
return logic.SayBye();
}
[WebMethod]
public string SayHello()
{
return logic.SayHello();
}
[WebMethod(MessageName="SayHelloName")]
public string SayHello(string name)
{
return logic.SayHello(name);
}
#endregion
}
调用的时候我们将看到一个SayHello方法,一个SayHello1方法,这里的SayHello1方法就是对应的SayHello(string)方法了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
HelloService.HelloWebServiceSoapClient h = new ConsoleApplication1.HelloService.HelloWebServiceSoapClient();
Console.WriteLine(h.SayBye());
Console.WriteLine(h.SayHello());
Console.WriteLine(h.SayHello1("test"));
}
}
}
好了,整个Web服务的调用就已经完成了,使用VS自带的重构功能来提取接口,实现接口有助于提供我们的开放效率,同时也降低了我们在封装成web服务的时候发生遗漏、拼写错误等失误。
由于本人对Web服务领域涉足未深,所以可能有错误之处,希望大家指正。