WCF使用入门(二)【四则运算】

勇敢不是无所畏惧,而是心怀恐惧,却依然向前!


Calculator.svc代码:

  public class Calculator : ICalculator
    {
        public double AddNumbers(double number1, double number2)
        {
            double result = number1 + number2;
            return result;
        }

        public double SubstractNumbers(double number1, double number2)
        {
            double result = number1 - number2;
            return result;
        }

        public double MultiplyNumbers(CalculatorModel calculatorModel)
        {
            double result = calculatorModel.number1 * calculatorModel.number2;
            return result;
        }

        public double DivisionNumbers(double number1, double number2)
        {
            double result = number1 / number2;
            return result;
        }
    }

ICalculator.cs代码:

 // 注意:您可以使用“重命名”菜单上的“重命名”命令将代码和配置文件中的接口名称“ICalculator”一起更改。
    [ServiceContract]
    public interface ICalculator
    {
        [OperationContract]
        double AddNumbers(double number1, double number2);

        [OperationContract]
        double SubstractNumbers(double number1, double number2);

        [OperationContract]
        double MultiplyNumbers(CalculatorModel calculatorModel);

        [OperationContract]
        double DivisionNumbers(double number1, double number2);

    }

    [DataContract]
    public class CalculatorModel
    { 
        [DataMember]
        public double number1 { get; set; }

        [DataMember]
        public double number2 { get; set; }
    }

Web.config

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 要避免公开元数据信息,请在部署之前将以下值设置为false -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!--要在故障中接收异常详细信息以进行调试,请将以下值设置为true。 在部署之前设置为false,以避免泄露异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <!--属性设置,name:服务的完全限定名,命名空间+实现类名;behaviorConfiguration行为配置,取设置的behavior的名称,具体可见behaviors节点-->
      <service name="WcfService.Calculator">

        <!--定义endpoint,指定地址(address),绑定(binding)以及协定(contract)-->
        <!-- 属性说明:
             address - 服务端地址,相对于baseAddress的相对地址,如果为空则为baseAddress,也可以设定为绝对地址
             binding - 绑定协议,系统的某一协议,basicHttpBinding,mexHttpBinding,wsHttpBinding等
             contract - 协议完全限定名(名称空间.类型名)
             name - 客户端代理类的构造方法中的endpointConfigurationName对应到这个name
             bindingConfiguration - 指定客户端binding的具体设置,指向<bindings>元素下同类型binding的name -->
        <endpoint address="" contract="WcfService.ICalculator" binding="basicHttpBinding"/>
        <!--WCF提供四种额外绑定: mexHttpBinding, mexHttpsBinding, mexTcpBinding和mexNamedPipeBinding绑定。这些绑定在不同传输协议上使用元数据暴露服务配置信息。
        小提示 以”mex”开始的绑定暴露服务元数据
        Windows 通信基础架构对那些所有用来暴露元数据的绑定加上”mex”前缀。

        mexHttpBinding绑定的存在是为了使用它在HTTP传输协议上暴露元数据。如果在basicHttpBinding, wsHttpBinding, ws2007HttpBinding绑定上或者任何包含了HttpTransportBindingElement绑定元素的自定义绑定上暴露服务的话那么使用它是合适的。
        对大多数情况来说mexHttpBinding绑定就是你的选择因为它提供了对你的元数据的最广泛地访问。这意味着元数据可以通过客户端工具如svcutil.exe 和Visual Studio 2005通过添加服务引用来直接访问。
        它也意味着元数据可以使用其他HTTP客户端访问,这包括IE, 火狐以及Opera 等浏览器。
        取决于你的安全配置,这可能不是必须的(基础Http协议是不支持安全的,你可以使用HTTPS或者证书等进行加密)。
        例如,如果你想使用netNamePipeBinding绑定在本机内进行通信,你可能不想使用这个绑定(这是为神马呢? 因为有mexNamedPipeBinding可以选择呀)。

        -->
        <endpoint address="mex" contract="IMetadataExchange" binding="mexHttpBinding"/>
      </service>
    </services>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
      要在调试期间浏览Web应用程序根目录,请将以下值设置为true。
         在部署之前设置为false,以避免泄露Web应用程序文件夹信息。
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

Program.cs代码:

 class Program
    {
        static void Main(string[] args)
        {
            CalculatorClient proxy = new CalculatorClient();

            Console.WriteLine("输入Number1");
            double number1 = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("输入Number2");
            double number2 = Convert.ToInt32(Console.ReadLine());

            Console.Write("\n\n");
            Console.Write("结果\n");
            Console.Write("===================================\n");

            double addResult = proxy.AddNumbers(number1, number2);
            Console.WriteLine("加法运算: {0}\n",addResult);

            double subResult = proxy.SubstractNumbers(number1, number2);
            Console.WriteLine("减法运算 : {0}\n", subResult);

            double mulResult = proxy.MultiplyNumbers(new CalculatorModel() { number1 = number1, number2 = number2 });
            Console.WriteLine("乘法运算 : {0}\n", mulResult);

            double divResult = proxy.DivisionNumbers(number1, number2);
            Console.WriteLine("除法运算 : {0}\n", divResult);

            Console.Write("===================================\n");
            Console.Write("请Enter退出...");

            Console.ReadKey(true);

            proxy.Close();

        }
    }

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup> 
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_ICalculator" />
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:15468/Calculator.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_ICalculator" contract="CalculatorService.ICalculator"
                name="BasicHttpBinding_ICalculator" />
        </client>
    </system.serviceModel>
</configuration>

项目运行结果如图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值