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 ...
随机推荐
- 02--C编程细节整理(一)
用C语言比较多,这篇是平时攒下的.有些内容在工作后可能会很常见,但是不用容易忘,所以就写篇博客吧. 1. printf的用法 %*可以用来跳过字符,可以用于未知缩进.像下面一样. for ...
- AssemblyInfo.cs 文件信息
using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices ...
- CorelDRAW X7中相机滤镜呈现出的复古照片效果
CorelDRAW X7软件中相机效果滤镜较之以前版本又增添了许多功能,模拟各种“相机”镜头产生的效果,包括彩色.相片过滤器.棕褐色色调和时间器效果,可以让照片回到历史,展示过去流行的摄影风格.以下步 ...
- centos7常见的操作
centos7的网络IP地址配置文件在 /etc/sysconfig/network-scripts 文件夹下, 查看当前网卡名称 ip ad li ens33网卡对应的配置文件为ifcfg-ens ...
- MongoDB基本操作总结
MongoDB语法总结:插入操作:单条插入语法 : insertOne()示例: db.getCollection('MY_TEST').insertOne({"日期" : &qu ...
- 【数据分析学习】Pandas思维导图
点我查看原版
- [tyvj-1061]Mobile Service 动态规划
滚动数组优化一波. 原设计状态:表示三个员工分别的位置和执行到的任务. 考虑到:执行完第i个任务,一定有员工在pos[i],那么就可以压一维,空间复杂度就算不滚动数组也可以了. (喜闻乐见,今天第一次 ...
- 基于Vue的事件响应式进度条组件
写在前面 找了很多Vue 进度条组件!,都不包含拖拽和点击事件,input range倒是原生包含input和change事件,但是直接基于input range做进度条的话,样式部分需要做大量调整和 ...
- 00072_System类
1.概念 (1)System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作: (2)System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象: (3)Syste ...
- ZOJ 3891 K-hash
K-hash Time Limit: 2000ms Memory Limit: 131072KB This problem will be judged on ZJU. Original ID: 38 ...