标签:
服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境。通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用,除去上面的两种寄宿方式,还可以以纯代码的方式实现服务的寄宿工作。
新建立一个控制台应用程序,添加System.ServiceModel库文件的引用。
添加WCF服务接口:ISchool使用ServiceContract进行接口约束,OperationContract进行行为约束
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ServiceModel; 6 using System.ServiceModel.Activation; 7 8 9 namespace WcfTest.Demo3 10 { 11 [ServiceContract] 12 public interface ISchool 13 { 14 [OperationContract] 15 string ShowName(string Name); 16 } 17 }
添加School类,实现Ishool接口:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace WcfTest.Demo3 7 { 8 public class School:ISchool 9 { 10 public string ShowName(string name) 11 { 12 return "Show Name " + name; 13 } 14 } 15 }
通过代码将ISchool接口寄宿到控制台应用程序之中:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 CoreCodeOpen(); 6 } 7 8 /// <summary> 9 /// 通过代码的方式完成服务的寄宿工作 10 /// </summary> 11 static void CoreCodeOpen() 12 { 13 try 14 { 15 using (ServiceHost host = new ServiceHost(typeof(School))) 16 { 17 host.AddServiceEndpoint(typeof(ISchool), new WSHttpBinding(), "http://10.0.0.217:20004/School"); 18 if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) 19 { 20 ServiceMetadataBehavior behavior = new ServiceMetadataBehavior(); 21 behavior.HttpGetEnabled = true; 22 behavior.HttpGetUrl = new Uri("http://10.0.0.217:20004/School/wcfapi"); 23 host.Description.Behaviors.Add(behavior); 24 } 25 host.Open(); 26 Console.WriteLine("寄宿到控制台应用程序,通过代码开启WCF服务"); 27 Console.ReadKey(); 28 } 29 } 30 catch (Exception ex) 31 { 32 Console.WriteLine("CoreCodeOpen Error:" + ex.Message); 33 } 34 } 35 }
以管理员身份运行程序>在浏览器输入http://10.0.0.217:20004/School/wcfapi>我们会得到以WSDL(网络服务描述语言-Web Services Description Language)形式体现的服务元数据
在解决方案中新建控制台客户端,添加服务引用,输入http://10.0.0.217:20004/School/wcfapi
找到了我们的Ischool服务接口,添加引用后进行服务的调用
标签:
原文地址:http://www.cnblogs.com/heyangyi/p/5699802.html