前言
如题,我们这次创建一个WCF服务库,是一个提供WCF服务的类库,编译以后是一个DLL文件。
创建
定义Contract
在VS中新建WCF的类库项目
创建成功后项目默认包含IService1.cs、Service1.cs、App.config这三个文件
可以直接修改这三个文件来实现我们的服务,也可以删除,重新添加我们需要的文件,为了更好的演示,我们重新建立。添加ICalculator接口和Calculator类来实现接口。
using System.ServiceModel;//需要引用System.ServiceModel.dll
//接口类代码
[ServiceContract]//申明服务契约
public interface ICalculator
{
[OperationContract]//操作契约
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
}
实现Contract
- 编辑Calculator类,来实现ICalculator接口
public class Calculator:ICalculator
{
//加法
public double Add(double n1, double n2)
{
double result = n1 + n2;
Console.WriteLine("Received Add({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
//减法
public double Subtract(double n1, double n2)
{
double result = n1 - n2;
Console.WriteLine("Received Subtract({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
//乘法
public double Multiply(double n1, double n2)
{
double result = n1 * n2;
Console.WriteLine("Received Multiply({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
//除法
public double Divide(double n1, double n2)
{
double result = n1 / n2;
Console.WriteLine("Received Divide({0},{1})", n1, n2);
Console.WriteLine("Return: {0}", result);
return result;
}
}
承载、运行服务
控制台承载
- 在创建的解决方案中添加一个控制台项目,添加对上述WCF服务库项目的引用。
static void Main(string[] args)
{
// Step 1 创建URL作为基址,需要使用系统管理员权限
Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/");
// Step 2 创建服务主机对象,使用服务的实例和基址来初始化
ServiceHost selfHost = new ServiceHost(typeof(Calculator), baseAddress);
try
{
// Step 3 添加服务终结点,合约、绑定、终结点地址
selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "Calculator");
// Step 4 元数据交换
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
// Step 5 启动服务
selfHost.Open();
Console.WriteLine("服务已启动!");
Console.WriteLine("按 <ENTER> 键结束服务");
Console.WriteLine();
Console.ReadLine();
// 关闭主机服务
selfHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("An exception occurred: {0}", ce.Message);
selfHost.Abort();
}
}
使用管理员权限运行控制台程序