一、建立一个服务端项目
1、添加“System.ServiceModel”引用。
2、定义服务协定
[ServiceContract(Name="MyService")]
public interface IService
{
[OperationContract]
string TestMethod();
[OperationContract (Name="SecondMethod")]
int Add(int a, int b);
}
3、定义一个类实现服务协定
public class MyService : IService
{
public string TestMethod()
{
return "这是一个测试方法";
}
public int Add(int a, int b)
{
return a + b;
}
}
4、在Main入口点中定义服务器相关的参数,并启动服务
static void Main(string[] args)
{
Uri baseUri = new Uri("http://localhost:8000/Service");
using(ServiceHost serverHost=new ServiceHost(typeof(MyService),baseUri))
{
//向服务器添终结点
WSHttpBinding httpBinding = new WSHttpBinding();
//这里不需要安全验证
httpBinding.Security.Mode = SecurityMode.None;
serverHost.AddServiceEndpoint(typeof(IService), httpBinding, "my");
//为了能让VS生成客户端代码,即WSDL文档,故要添加以下行为
ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior
{
HttpGetEnabled=true
};
serverHost.Description.Behaviors.Add(mdBehavior);
//如果服务顺利启动,则提示,处理Opened事件
serverHost.Opened += (sender, e) => Console.WriteLine("服务已启动");
//启动服务
try
{
serverHost.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
// 为了让程序不往下执行而结束,故加上这句
Console.ReadKey();
// 关闭服务器
serverHost.Close();
}
}
这样服务端就做好了。
二、建立客户端
1、建立一个客户端并添加服务引用,就是刚才建好的服务(使用其基地址),要保证服务处于打开状态才能成功添加服务引用。
2、服务添加成功后,我们就可以在客户端程序里面进行调用了。
三、多服务协定
1、定义多个服务协定
/// <summary>
/// 第一个服务协定
/// </summary>
[ServiceContract]
public interface IService1
{
[OperationContract]
string SayHelloA();
}
/// <summary>
/// 第二个服务协定
/// </summary>
[ServiceContract]
public interface IService2
{
[OperationContract]
string SayHelloB();
}
/// <summary>
/// 第三个服务协定
/// </summary>
[ServiceContract]
public interface IService3
{
[OperationContract]
string SayHelloC();
}
2、实现多个服务协定,并启动服务
/// <summary>
/// 实现多个服务协定
/// </summary>
public class MultiServices:IService1,IService2,IService3
{
//在Main函数中启动服务
static void Main(string [] args)
{
using (ServiceHost host = new ServiceHost(typeof(MultiServices), new Uri("http://localhost:8002/Service")))
{
WSHttpBinding binding = new WSHttpBinding();
binding.Name = "myBinding";
binding.Security.Mode = SecurityMode.None;
//对每一个协定添加终结点
host.AddServiceEndpoint(typeof(IService1), binding, "mySv1");
host.AddServiceEndpoint(typeof(IService2), binding, "mySv2");
host.AddServiceEndpoint(typeof(IService3), binding, "mySv3");
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior { HttpGetEnabled = true };
host.Description.Behaviors.Add(behavior);
host.Opened += (sender,e) => Console.WriteLine("服务已启动");
try
{
host.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
host.Close();
}
}
public string SayHelloA()
{
return "你好,这是第一个服务协定";
}
public string SayHelloB()
{
return "你好,这是第二个服务协定";
}
public string SayHelloC()
{
return "你好,这是第三个服务协定";
}
}