一、建立一個服務端項目
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 "你好,這是第三個服務協定";
}
}