WCF小试
1、创建WCF
右键解决方案-新建项目-WCF服务应用程序。
创建后会生成一些文件,其中IService.cs是服务的接口,只有在接口中定义的方法才能被外部调用,Service.svc是我们的服务名称,Service.svc.cs是服务代码所在文件,继承自IService.cs。
2、写服务代码
由于Service.svc.cs继承自IService.cs接口,所以在写方法之前需要先在IService.cs接口中添加方法。
比如这里添加一个DataSet GetData(int value);方法。方法前面要加OperationContract标签。
[OperationContract]
DataSet GetData(int id);
然后在Service.svc.cs文件中实现这个方法。
public DataSet GetData(int id)
{
try
{
SqlParameter[] pms = { new SqlParameter("@UserId",id)};
Entities db = new Entities();
List<User> user = db.User.SqlQuery("exec sp_GetUser @UserId",pms).ToList();
//string sql = "exec sp_GetUser @UserId";
//DataSet ds = SqlHelper.ExecuteDataSet(sql, pms);
return SqlHelper.ToDataSet(user);
}
catch (Exception ex)
{
SqlHelper.WriteErrorLog("Log", ex.Message);
return null;
}
}
这里我写了两种连接数据库的方式,ADO.NET和EF,用来执行一个存储过程sp_GetUser,该过程搜索出userid等于传入参数的记录。
除了这些还要在web.config中的system.serviceModel标签中配置WCF的内容(也可以右键web.config文件选择编辑WCF配置,具体可自行百度),如下:
<system.serviceModel>
<services>
<service name="WcfServiceTest.Service1">
<host>
<baseAddresses>
<!-- 部署的地址 -->
<add baseAddress="http://192.168.113.34:801/" />
</baseAddresses>
</host>
<endpoint address="WCFTest" binding="basicHttpBinding" bindingConfiguration="" contract="WcfServiceTest.IService1" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
<serviceMetadata httpGetEnabled="true" />
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
写到这,我们的WCF服务端代码就完成了,直接F5运行项目,即可在本地调试WCF,调试完成后右键Service.svc,选择在浏览器中查看,就可以看到我们的服务了,地址栏中的地址就是我们的服务地址了。

3、部署
我们的WCF服务是要部署在IIS服务器上的,这一步也是最容易出错的地方。
右键添加网站,指向我们发布好的文件夹,右侧菜单选择浏览。
这里要注意几点:
1、要保证IIS应用程序池的Framework版本和发布的代码版本一致,否则会出错。
2、IIS中该项目的标识默认是ApplicationPoolIdentity,要设置为NetworkService,否则会出错。
3、SqlServer中的NetworkService用户要启用,如果没有的话就要自己添加,添加步骤为:
数据库-安全性-登录名-右键新建登录名-搜索-高级-立即查找-选中NetworkService-确定。然后配置该用户的权限。
注意这里的NetworkService用户不是我们数据库的登录用户。不影响连接字符串中的uid。
4、调用
我们使用WebForm页面来调用部署好的WCF服务。
创建完项目后,右键添加服务引用,输入我们部署好的服务地址(如http://192.168.113.34:801/Service1.svc),点击转到,即可看到我们的服务名称,点击该服务还能看到可以调用的方法,确定。
引用完后会多出一个Service References文件夹,里边是我们引用的服务。如图:

然后在cs文件里使用该服务:
ServiceReference1.Service1Client sc = new ServiceReference1.Service1Client();
其中的sc即是我们的服务对象,就可以点出我们想要调用的方法了:
DataSet ds = sc.GetData();
OK,搞定!
WCF小试的更多相关文章
- HttpClient + ASP.NET Web API, WCF之外的另一个选择
WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...
- WCF基础之事务
说到事务,我最先想到的是“回滚”. 百科:事务是恢复和并发控制的基本单位.事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性.好了,具体的就不多复制了. 我小试了一下 ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- 【WCF】使用“用户名/密码”验证的合理方法
我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...
- 【WCF】错误协定声明
在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...
- 【WCF】自定义错误处理(IErrorHandler接口的用法)
当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...
- [WCF]缺少一行代码引发的血案
这是今天作项目支持的发现的一个关于WCF的问题,虽然最终我只是添加了一行代码就解决了这个问题,但是整个纠错过程是痛苦的,甚至最终发现这个问题都具有偶然性.具体来说,这是一个关于如何自动为服务接口(契约 ...
- 【原创经验分享】WCF之消息队列
最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...
- Ajax使用WCF实现小票pos机打印源码
通过ajax跨域方式调用WCF服务,实现小票pos机的打印,源码提供web方式,客户端方式测试,服务驻留右侧底部任务栏,可控制服务开启暂停,用户可自定义小票打印模板,配合零售录入. qq 22945 ...
随机推荐
- PHP 绘图技术
1.图片格式:目前网站开发常见的图片格式有gif,jpg/jpeg,png ..... 区别: gif 图片压缩率高,但是只能显示256色,可能造成颜色的丢失,可以显示动画 jpg/jpeg 图片压缩 ...
- DELPHI中多线程知识【转】
本文的内容取自网络,并重新加以整理,在此留存仅仅是方便自己学习和查阅.所有代码均亲自测试 delphi7下测试有效.图片均为自己制作. 多线程应该是编程工作者的基础技能, 但这个基础我从来没学过,所以 ...
- origin从图中获得数据
有Origin的原图,即利用Origin的"copy page"功能直接拷贝到文字处理软件的数据图,对于这种图,双击用Origin打开后,双击要导出数据的权限,打开"pl ...
- flex 事件注册和鼠标拖动
flex 事件注册和鼠标拖动 <?xml version="1.0" encoding="utf-8"?> <s:Application xm ...
- jQuery css,position,offset,scrollTop,scrollLeft用法
jQuery css,position,offset,scrollTop,scrollLeft用法: <%@ page language="java" import=&quo ...
- Cocos2d-x 多分辨率支持
最近遇到多分辨率支持问题,所以查了一些资料.将一些收获共享一下,以便自己和其他需要的朋友日后参考. 如果我要建立一个cocos2d-x项目,我的目标是支持iphone3G( 480, 320 ),ip ...
- 模式字符串匹配问题(KMP算法)
这两天又看了一遍<算法导论>上面的字符串匹配那一节,下面是实现的几个程序,可能有错误,仅供参考和交流. 关于详细的讲解,网上有很多,大多数算法及数据结构书中都应该有涉及,由于时间限制,在这 ...
- We Chall-Training: Get Sourced-Writeup
MarkdownPad Document html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,ab ...
- ECMAScript 6 笔记(六)
编程风格 1. 块级作用域 (1)let 取代 var (2)全局常量和线程安全 在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量. const优于le ...
- 微信小程序 JS动态修改样式
微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...