一个简单WCF项目的建立 by wsz
由于搬砖的需要,不得不学一点与WCF有关的东西。具体是因为前几周在64位环境下写的一个dll不能被集成到合作伙伴的32位工程中,但是要修改文件实在是划不来,一个压缩后600M的文件搬来搬去的也是让人蛋碎。因此想到了WCF。这样只要提供一个service,运行一个host,然后在client上调用就可以了。貌似是一件很简单的事,但是却做了整一下午还多。
WCF的确是个好东西,从功能来看,WCF可以看作是ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等很多我不懂的技术的并集。WCF中支持的传输协议包括HTTP、TCP、Peer network等很多我不懂的协议。简单介绍一下HTTP,和TCP的地址类型,大概是这样子的:
HTTP地址
即使用HTTP协议进行传输(包括https安全传输协议)。其地址形式为
http://localhost:8000/
如果地址中为制定端口号,则默认端口为80
TCP地址
使用TCP协议进行传输,其形式为:
net.tcp://localhost:8000/
下午经历了一个由HTTP到TCP过度的一个痛苦过程。个人感觉TCP要比HTTP麻烦那么一点。就用HTTP协议简单介绍一下这个建立过程。
一个简单的WCF
建立host可以用两种方式,一种是直接建立一个WCF服务集+一个host项目,另一种是建立两个类库+一个host项目。直观的区别是用服务集可以将interface和service放在一个项目下;否则就是用一个类库作为interface,另一个作为service。这里就用两个类库为例吧。先在解决方案中添加一个类库取名Contract作为服务契约(要添加ServiceModel的引用),在建立一个Service类库(要添加ServiceModel和Contract的引用)。在Contract中写一个简单的interface如下(用来计算a与b的和):
namespace Contract
{
[ServiceContract]
public interface ICaculate
{
[OperationContract]
int Caculate(int a,int b);
}
}
[ServiceContract]表示服务契约,就是在ServiceModel的引用下的。
在Service中实现这个类
namespace Service
{
public class myCaculate:ICaculate
{
public int Caculate(int x, int y)
{
return x + y;
}
}
}
接下来添加一个Host项目比如一个控制台程序,大概是这样的(要把Host设置为主项):
在Host项目中要添加ServiceModel,Service和Contract的引用。这里有两种方式写Program中的代码。一种是直接在代码写协议的类型,另一种是在App.config中设置协议。这里用配置文件的方式,因为这样host中的代码会非常简单,而且个人感觉App.config在WCF中扮演一个很犀利的角色。这需要我们先生成一个大概的App.config代码框架,再根据具体情况设置参数(如果整个配置文件都是手写的,那只能Or2)。具体的编辑工具在VS2010的工具à服务配置编辑器中。打开Host中的配置文件,主要的任务是添加service和behavior,此外要建立一个url作为endpoint。这里选择basicHttpBinding绑定方式。具体操作很简单就不赘述了,用起来很方便。重要的是设置完成之后别忘了保存,否则就白费了。生成的配置文件大概是这样的:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="Behavior0">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="Behavior0" name="Service.myCaculate">
<endpoint address="http://localhost:8080/HelloService" binding="basicHttpBinding"
bindingConfiguration="" contract="Contract.ICaculate" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/HelloService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
Behavior的名字是随便取的,这里的url是http://localhost:8080/HelloService。
这样host的main函数中代码就很简单了
ServiceHost host = new ServiceHost(typeof(myCaculate));
host.Open();
Console.WriteLine("Start Your Service.");
Console.ReadKey();
host.Close();
这么几行就够了。这样host就可以运行了。接下来建立一个控制台程序作为Client。建立好之后,先让Host运行起来,然后在client的引用中添加ServiceReferences http://localhost:8080/HelloService。
这样在Client的代码中就可以调用Service中的myCaculate类来计算两个数的和了。
在Client中可以直接调用Service(代码比较麻烦)或者通过代理调用(简单多了)。
代理调用的代码如下:
ServiceReference1.CaculateClient ca = new ServiceReference1.CaculateClient();
Console.WriteLine(ca.Caculate(6, 7));
一个简单的http协议的WCF就是在这样了。在Host的App.Config中可以进行很多参数的设定,比如传输的最大字节,timeout等。都根据具体的需要进行设定。对于TCP协议的要麻烦一点。不过大体流程是一样的。
WCF的跨平台性很好,而且集成了多种协议,微软的这个产品的确令人佩服。
转载于:https://www.cnblogs.com/smart-code/archive/2012/08/30/2664665.html
一个简单WCF项目的建立 by wsz相关推荐
- 《maven实战》笔记(2)----一个简单maven项目的搭建,测试和打包
参照<maven实战>在本地创建对应的基本项目helloworld,在本地完成后项目结构如下: 可以看到maven项目的骨架: src/main/java(javaz主代码) src/te ...
- c c 语言编程项目实例,实例分享cmake编译一个简单c++项目(demo)
实例分享cmake编译一个简单c++项目(demo) 发布时间:2020-09-19 21:08:04 来源:脚本之家 阅读:63 作者:mdxy-dxy 下面通过一个小例子来说明cmake编译一个c ...
- 使用spring boot实现一个简单的项目——⽤户管理功能
Spring Boot之用户管理功能 趁着这几天有时间跟大家分享一个使用spring boot实现的一个简单的项目,也开启了我第一次在CSDN上面写博客,相信这是个新的篇章.好了,废话不多说,直接上真 ...
- python实现一个简单的项目_Python小项目四:实现简单的web服务器
本博客是整理在学习实验楼的课程过程中记录下的笔记形成的,参考:https://www.shiyanlou.com/courses/552.不同之处在于实验楼使用python2.7,而博主这里使用的是p ...
- python实现一个简单的项目建议书范文_建议收藏,22个Python迷你项目(附源码)
Python部落在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项 ...
- python实现一个简单的项目建议书范文_建议收藏,18个Python迷你项目(附源码)
在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...
- 记一个简单的项目(短信招投标流程)
新年上来就有一个小的项目经过多天的努力这个项目已经接近尾声了.其实有时候客户也并不是那么挑剔,当然这也是看客户对这方面的认识程度怎么样,像这个客户他就要这么简单的一个流程,能够通过短信来招标跟供应商进 ...
- 搭建一个简单vue项目web项目全过程(完整步骤)
一.安装node环境 1.下载地址为:Node.js 2.检查是否安装成功:如果输出版本号,说明我们安装node环境成功 2.检查是否安装成功:如果输出版本号,说明我们安装node环境成功 3.为了提 ...
- erdas空间建模_ERDAS批处理的一个简单的空间模型建立
摘要: 用一个单一的输入影像,通过例子程序的产生来举例说明如何建立一个批处理的空间模型.这个模型将用" 1 "替换专题图像的第三个类别值,剩下的类别值则用" 0 &quo ...
最新文章
- 图片转字符 android,转字符图app下载-转字符图 安卓版v2.4-PC6安卓网
- boost::intrusive::member_value_traits用法的测试程序
- 2020快手食品行业数据价值报告
- 14 MM配置-BP业务伙伴-定义供应商科目组和字段选择
- Java实现将二进制文件显示为图片(SU中的ximage)
- springboot 建readme_README
- 手把手教你学单片机--51单片机C语言开发
- 你不知道的分布式锁+分布式事务面试题
- vb c语言入门教程,c语言和vb哪个简单
- 机器学习 损失函数 Loss function
- 吃瓜 || 一文看懂BCH分叉事件始末
- 异步编程之 Isolate
- jsp免费虚拟空间 jhost邀请码
- AKA传奇和亚嵌那些事
- taobao app 爬虫杂谈
- 什么是案例管理模型和符号(CMMN)
- [WebApi]WebApi通过接口上传文件-单文件 多文件上传 文件下载
- 运用NaviCat进行MongoDB查询管道操作索引等操作
- 无人驾驶:从轻絮飞扬到落地为安
- 2019年12月PAT甲级 第一题 Good in C(1164)题解
热门文章
- 二、mongodb数据库系列——聚合操作 索引操作 权限管理
- Chapter1-1_Speech_Recognition(Overview)
- LeetCode LCS 03. 主题空间(广度优先搜索BFS)
- Java 数组及多维数组
- LeetCode 第 31 场双周赛(273/2767,前9.87%,第3次全部通过)
- LeetCode 1353. 最多可以参加的会议数目(排序+贪心,优先队列,难)
- LeetCode 1029. 两地调度(贪心)
- LeetCode 1108. IP 地址无效化
- tensor转换为图片_为大家介绍图片转换pdf的经验总结!你找对方法了吗?
- 生活中c语言排序案例,C语言之数字排序-基于冒泡排序法的一些案例(对未知数量的数字进行排序)...