环境:Microsoft Visual Studio 2017
注意事项:右键“以管理员身份”启动VS。
目标:实现一个加法运算,并在服务器端D盘新建一个文件夹。
一、服务器端创建WCF服务
1、右键启动VS;
2、“文件”-“新建”-“项目”,Visual C#->Windows经典桌面,右侧的“类库(.net Framework)”,新建一个项目“SytWCFService”;
3、右键“SytWCFService”->添加->新建项,选择“接口”;右键“Interface1”选择重命名,为“ISytService”;修改文件名为“ISytService”;修改为public interface;
4、添加引用“System.ServiceModel”:右键添加,引用;
5、完成以下代码(创建接口):
using System.ServiceModel; namespace SytWCFService { /// <summary> /// 定义服务契约:通过接口实现契约 /// </summary> [ServiceContract(Name = "SytService")] public interface ISytInterface { /// <summary> /// 定义操作契约 /// </summary> /// <param name="num1"></param> /// <param name="num2"></param> /// <returns></returns> [OperationContract(Name = "AddOperation")] double AddOperation(double num1, double num2); [OperationContract(Name = "CreateDir")] bool CreateDir(string dir); } }
6、实现接口:新建类SytService : ISytService,继承ISytService接口,在接口名上点左键,可以一键“实现接口”。
7、完成以下代码(实现接口):
using System.IO; namespace SytWCFService { public class SytService : ISytService { public double AddOperation(double num1, double num2) { return num1 + num2; } public bool CreateDir(string dir) { if (!Directory.Exists(dir))//如果不存在就创建 dir 文件夹 { Directory.CreateDirectory(dir); return true; } else { return false; } } } }
二、定义宿主,寄宿WCF服务
WCF服务典型的宿主包括以下四种:
"Self-Hosting" in a Managed Application(自托管宿主)
Managed Windows Services(Windows Services宿主)
Internet Information Services(IIS宿主)
Windows Process Activation Service(WAS宿主)
1、以自托管宿主的方式寄宿。
1.1 通过代码的方式配置WCF服务
略。
1.2 通过配置文件的方式配置WCF服务
(1)添加一个console控制台项目“ConsoleHosting”,完成以下代码:
using System.ServiceModel; using SytWCFService; namespace ConsoleHosting { class Program { static void Main(string[] args) { //如果采用了配置文件的方式,服务寄宿代码将会得到极大的精简,只需包含下面几行代码: using (ServiceHost host = new ServiceHost(typeof(SytService))) { host.Open(); Console.WriteLine("服务已启动"); Console.Read(); } //通过代码的方式配置WCF服务 //using (ServiceHost host = new ServiceHost(typeof(SytService), new Uri("http://127.0.0.1:9099/CalculateWcfService"))) //{ // BasicHttpBinding bind = new BasicHttpBinding // { // Name = "basichttpbinding" // }; // host.AddServiceEndpoint(typeof(ICalculateService), bind, "CalculateWcfService"); // if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null) // { // ServiceMetadataBehavior behavior = new ServiceMetadataBehavior() // { // HttpGetEnabled = true // }; // host.Description.Behaviors.Add(behavior); // } // host.AddServiceEndpoint(typeof(IMetadataExchange), bind, "mex"); // if (host.State != CommunicationState.Opened) // { // host.Open(); // } // Console.WriteLine("服务已启动"); // Console.Read(); //} } } }
(2)在“ConsoleHosting”项目中添加一个app.config应用程序配置文件。