WCF(一)控制台寄宿
WCF是微软开发的一款通信框架。具有跨平台跨操作系统的特点,所以,WCF一般用于开发第三方接口或者在分布式系统用做数据交互。
WCF三要素分别是地址(Address)、绑定(Binding)、契约(Contract)。
地址:服务端与客户端通信的uri。
绑定:描述了服务端与客户端交互数据的协议,服务端和客户端必须保持一致才能交互数据。
契约:系统间进行交互的数据/消息结构、格式。
做个Demo演示一下。
项目结构:

1、定义契约(服务契约、数据契约)
namespace WCFService //服务契约
{
[ServiceContract]
public interface ICalculate
{
[OperationContract]
int Add(int a, int b);
[OperationContract]
int Subtract();
}
}
namespace WCFModel //数据契约
{
[DataContract]
public class OperationNumber
{
[DataMember]
public int Num1 { get; set; }
[DataMember]
public int Num2 { get; set; }
}
}
2、实现契约,定义服务
namespace WCFService
{
public class Calculate : ICalculate
{
public int Add(int a, int b)
{
return a + b;
} OperationNumber oper = new OperationNumber() { Num1 = , Num2 = };
public int Subtract()
{
int result = oper.Num1 - oper.Num2;
return result;
}
}
}
3、服务端开发,把WCF寄宿到控制台应用程序中
3.1、创建控制台应用程序
namespace WCFServer
{
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(WCFService.Calculate)))
{
host.Open();
Console.WriteLine("服务开启了");
Console.ReadKey();
}
}
}
3.2 配置服务端App.config文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<services>
<service name="WCFService.Calculate" behaviorConfiguration="metadataBehavior" >
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:9999/Calculate"/>
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="WCFService.ICalculate"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
3.3、编译生成下服务端,让服务端处于运行状态。在浏览器中输入“http://127.0.0.1:9999/Calculate”,看到类似下面的图片,表示服务端开发完成。

4、实现客户端调用WCF,完成数据交互
4.1创建客户端控制台应用程序,客户端在应用程序的"引用"节点右键,选择"添加引用服务",在弹出来的对话框中的地址栏写入服务端的地址,选择“发现”即可看到客户顿获得服务端定义的方法。
namespace WCFClient
{
class Program
{
static void Main(string[] args)
{
using (ChannelFactory<ICalculate> channelFactory = new ChannelFactory<ICalculate>("WSHttpBinding_ICalculate"))
{
ICalculate proxy = channelFactory.CreateChannel();
using(proxy as IDisposable)
{
Console.WriteLine(proxy.Add(,));
Console.WriteLine(proxy.Subtract());
}
}
Console.ReadKey();
}
}
4.2配置客户端App.config文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculate" />
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://127.0.0.1:9999/Calculate" binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ICalculate" contract="WCFReference.ICalculate"
name="WSHttpBinding_ICalculate">
<identity>
<userPrincipalName value="SUN-PC\Administrator" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
5、生成下客户端,在服务端程序运行的情况下,运行客户端,可以看到客户端运行结果。

备注:
添加契约需要引用"System.ServiceModel"命名空间。
数据契约除了引用上面的命名空间外,还需要引用“System.Runtime.Serialization”命名空间。
WCF(一)控制台寄宿的更多相关文章
- 创建WCF服务自我寄宿
WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为 ...
- WCF服务自我寄宿
WCF服务的寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以寄宿在各种进程之中,常见的寄宿有: IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为 ...
- WCF绑定netTcpBinding寄宿到IIS
继续沿用上一篇随笔中WCF服务类库 Wettery.WcfContract.Services WCF绑定netTcpBinding寄宿到控制台应用程序 服务端 添加WCF服务应用程序 Wettery. ...
- WCF绑定netTcpBinding寄宿到控制台应用程序
契约 新建一个WCF服务类库项目,在其中添加两个WCF服务:GameService,PlayerService 代码如下: [ServiceContract] public interface IGa ...
- WCF服务自我寄宿 Windows服务
WCF寄宿有自我寄宿跟IIS寄宿 服务代码: [ServiceContract] ---服务契约 public interface ICustomerService { [OperationContr ...
- 通过代码的方式完成WCF服务的寄宿工作
使用纯代码的方式进行服务寄宿 服务寄宿的目的是为了开启一个进程,为WCF服务提供一个运行的环境.通过为服务添加一个或者多个终结点,使之暴露给潜在的服务消费,服务消费者通过匹配的终结点对该服务进行调用, ...
- WCF :IIS寄宿方式的Web地址、BaseAddress和EndPoint Address的关系
对于在IIS中通过W3SVC或WAS寄宿的WCF Service,其在浏览器中显示的地址(Web地址),与其配置文件中的BaseAddress和EndPoint Address有什么关系呢?让我们来分 ...
- WCF 非http寄宿IIS
摘要 从IIS 7 开始, IIS增加了对非HTTP协议的支持. 因此, 自IIS 7之后, 可以将NetTcpBinding等非HTTP协议的Bindings直接寄宿在IIS上面. 本文将介绍如何在 ...
- 使用C#创建WCF服务控制台应用程序
本文属于原创,转载请注明出处,谢谢! 一.开发环境 操作系统:Windows 10 开发环境:VS2015 编程语言:C# IIS版本:10.0.0.0 二.添加WCF服务.Internet Info ...
随机推荐
- JS 从36个数字里面随机抽取8个
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- node——通过express模拟Apache实现静态资源托管
1.express中处理静态资源的函数 创建一个app.js作为入口文件,创建一个public文件夹作为静态资源文件夹 var app=express();var fn=express.static( ...
- PowerDesigner工具
PowerDesigner是一款数据库设计与建模工具,开发人员可以在上面设计表结构,而不用一开始就创建数据库中的表,因为设计阶段数据库表结构会经常变动.设计完后可以导出创建所有表的SQL脚本,直接执行 ...
- iview关于menu结合router问题
#iview关于menu结合router问题 1. Menu.Item下router问题: 直接在Menu标签上绑定on-select事件,可以获取到name(name为元素绑定name) <M ...
- 【vue】v-if和v-show的区别
今天来捋一下vue中的v-if与v-show的区别 先来看一下vue官方文档对他们的解释 2.从实现方式来看: v-if是当依赖的值变为false时,直接让元素消失,html代码也会消失,相当于直接在 ...
- [网络流24题] 最长k可重线段集问题 (费用流)
洛谷传送门 LOJ传送门 最长k可重区间集问题的加强版 大体思路都一样的,不再赘述,但有一些细节需要注意 首先,坐标有负数,而且需要开$longlong$算距离 但下面才是重点: 我们把问题放到了二维 ...
- position:fixed div如何居中
div{position:fixed;margin:auto;left:0; right:0; top:0; bottom:0;width:200px; height:150px;}
- ASP.NET-signalR学习笔记
- Qt Quick 之 QML 与 C++ 混合编程具体解释
Qt Quick 技术的引入.使得你能够高速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的.也有非常多局限性,原来 Qt 的一些技术,比方低阶的网络编程如 QTcpSocke ...
- ST Nucleo mbed套件开发 一 MBED环境使用 以Nucleo-F401为例 (二)
MBED环境.使用起来总是那么的别扭可能很多人不习惯用在线编程器,大多数做ST32开发的都比較喜欢KEIL或者IAR,有没有什么好的方法呢.我们能够本地编译MBEDproject, 答案是肯定了.下来 ...