WCF服务系列——创建

一、Visual Studi 2013环境下,新建WCF服务

1、新建一个空白解决方案,解决方案名称为“WCFSolution”。

2、解决方案右键->添加->WCF->WCF服务库,类库名称为CalculateWcfService。

3、创建服务契约

WCF采用基于契约的交互方式实现了服务的自制。服务契约是相关操作的集合。契约就是双方或多方就某个关注点达成的一种共识,是一方向另一方的一种承诺。签署了某个契约就意味着自己有义务履行契约中的各项规定,一旦违约势必影响契约双方的正常交互。我们主张通过抽象将接口和实现相互分离,鼓励接口的依赖,避免基于实现的依赖。接口是稳定的,而实现则是易变的,基于接口的服务调用能够更有效地应对实现的变化带来的影响。接口从本质上讲就是一种契约,当某个类实现了某个接口,就相对于签署了一份契约。所以契约关心的是“我能做到”,不在于“我如何做到”。所以,服务契约是以接口的形式进行定义的。

下面的代码中,定义了一个接口,通过在接口上应用System.ServiceModel命名空间下的ServiceContractAttribute特性将ICalculateService接口定义成服务契约。在应用ServiceContractAttribute特性的同时,还可以指定服务契约的名称和命名空间。每个服务契约都有一个确定的名称,当在一个接口上应用了该属性以后,默认的名称就是接口的名称。我们可以通过Name属性显示地指定需要的名称。
NameSpace:服务契约的命名空间,其作用是解决命名冲突的问题,提倡将你所在的公司名称或项目名称的URN作为命名空间。WCF默认的命名空间是:http://tempuri.org/。

服务契约是一组相关服务操作的集合,当我们在一个接口上应用了ServiceContractAttribute,便赋予了服务契约的属性。但是,对于这样一个类型,它的成语并不会自动成为契约的服务操作,只有应用了OperationContractAttribute特性后,相应的方法成员才能成为能够通过服务调用方式访问的服务操作。

CalculateWcfService.ICalculateService

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace CalculateWcfService
{
    /// <summary>
    /// 定义服务契约:通过接口实现契约
    /// </summary>
    [ServiceContract(Name = "CalculateService")]
    public interface ICalculateService
    {
        /// <summary>
        /// 定义操作契约
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        [OperationContract(Name = "AddOperation")]
        double AddOperation(double num1, double num2);

        /// <summary>
        /// 定义操作契约
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        [OperationContract(Name = "SubOperation")]
        double SubOperation(double num1, double num2);

        /// <summary>
        /// 定义操作契约
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        [OperationContract(Name = "MulOperation")]
        double MulOperation(double num1, double num2);

        /// <summary>
        /// 定义操作契约
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        [OperationContract(Name = "DivOperation")]
        double DivOperation(double num1, double num2);
    }
}

4、创建服务:新建一个类,实现第3步中创建的接口
当服务契约成功创建时,我们需要通过实现服务契约来创建具体的WCF服务。WCF服务CalculateService实现了服务契约接口ICalculateService,实现了接口里面定义的所有服务操作。

ICalculateService.CalculateService

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace CalculateWcfService
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
    public class CalculateService : ICalculateService
    { /// <summary>
        /// 加
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        public double AddOperation(double num1, double num2)
        {
            return num1 + num2;
        }

        /// <summary>
        /// 减
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        public double SubOperation(double num1, double num2)
        {
            return num1 - num2;
        }

        /// <summary>
        /// 乘
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        public double MulOperation(double num1, double num2)
        {
            return num1 * num2;
        }

        /// <summary>
        /// 除
        /// </summary>
        /// <param name="num1"></param>
        /// <param name="num2"></param>
        /// <returns></returns>
        public double DivOperation(double num1, double num2)
        {
            return num1 / num2;
        }
    }
}

App.Config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- 部署服务库项目时,必须将配置文件的内容添加到 
  主机的 app.config 文件中。System.Configuration 不支持库的配置文件。-->
  <system.serviceModel>
    <services>
      <service name="CalculateWcfService.CalculateService">
        <endpoint address="" binding="basicHttpBinding" contract="CalculateWcfService.ICalculateService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8733/Design_Time_Addresses/CalculateWcfService/CalculateService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,
          请在部署前将以下值设置为 false -->
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>
          <!-- 要接收故障异常详细信息以进行调试,
          请将以下值设置为 true。在部署前设置为 false 
            以避免泄漏异常信息-->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值