WCF应用实例

WCF 应用实例

工程结构如图所示

在这里插入图片描述

创建契约 IService(类库)

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace IService
{
    [ServiceContract]
    public interface ICalculator
    {
        [OperationContract]
        int Add(int x, int y);
        [OperationContract]
        int Subtract(int x, int y);
    }
}

拓展:ServiceContract的属性
请添加图片描述
拓展:OperationContract的属性
在这里插入图片描述

创建服务代理 ServiceHost (控制台)


using IService;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace Service
{
    internal class Program
    {
        static void Main(string[] args)
        {
            using(ServiceHost serviceHost = new ServiceHost(typeof(Calculator)))
            {
                serviceHost.Open();
                Console.WriteLine("Service Host is opened");
                Console.ReadKey();
                serviceHost.Close();
            }
        }
    }

    public class Calculator : ICalculator
    {
        public int Add(int x, int y)
        {
            return x + y;
        }

        public int Subtract(int x, int y)
        {
            return x - y;
        }
    }

}

代理服务的难点是对服务端的配置:App.config
这个可以自己写config,也可以应用Visual Studio 的WCF服务配置工具生成

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<system.serviceModel>
		<behaviors>
			<serviceBehaviors>
				<behavior name="NewBehavior0">
					<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false"
                        includeExceptionDetailInFaults="true" />
					<serviceMetadata httpGetEnabled="true" />
				</behavior>
			</serviceBehaviors>
		</behaviors>
		<services>
			<service behaviorConfiguration="NewBehavior0" name="Service.Calculator">
				<endpoint address="http://localhost:8000" binding="basicHttpBinding"
                    bindingConfiguration="" name="endpoint1" contract="IService.ICalculator" />
				<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
                    name="endpoint2" contract="IMetadataExchange" />
				<host>
					<baseAddresses>
						<add baseAddress="http://localhost:8000" />
					</baseAddresses>
				</host>
			</service>
		</services>
	</system.serviceModel>
</configuration>
WCF服务配置工具生成的步骤

请添加图片描述
Step1.新建配置
在这里插入图片描述
Step2.新建服务
在这里插入图片描述
Step3.服务类型
在这里插入图片描述
Step4.导入契约
在这里插入图片描述
Step5.指定终结点地址(由于默认选择是http方式)
请添加图片描述
Step6.创建服务行为
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Step7.服务的行为配置
在这里插入图片描述
Step8.终结点
在这里插入图片描述
在这里插入图片描述
Step9.创建基地址
请添加图片描述
Step10.生成App.config,并替换控制台的App.config
请添加图片描述

创建客户端 (控制台)

客户端元数据的获取有两种方式 :1.服务引用,2.svcutil.exe,下面分别介绍使用。
获取元数据的前提:一定要用【管理员】权限,运行服务代理。

1.服务引用

请添加图片描述
请添加图片描述
此时自动生成了 客户端config和相关接口的实现
请添加图片描述
Client代码

using Client1.ServiceReference1;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Client1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            CalculatorClient client = new CalculatorClient("endpoint1");//endpointConfigName
            int i = client.Add(19, 1);
            Console.WriteLine(i);
            Console.ReadLine();
        }
    }
}

2.svcutil.exe

找到svcutil.exe的路径,并在当前路径下输入cmd
请添加图片描述
输入命令行
在这里插入图片描述
生成Calculator.cs 和output.config。将Calculator.cs 添加到client工程中,output.config的内容替换到app.config中,即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值