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小试的更多相关文章

  1. HttpClient + ASP.NET Web API, WCF之外的另一个选择

    WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...

  2. WCF基础之事务

    说到事务,我最先想到的是“回滚”. 百科:事务是恢复和并发控制的基本单位.事务应该具有4个属性:原子性.一致性.隔离性.持久性.这四个属性通常称为ACID特性.好了,具体的就不多复制了. 我小试了一下 ...

  3. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  4. 【WCF】使用“用户名/密码”验证的合理方法

    我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...

  5. 【WCF】错误协定声明

    在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...

  6. 【WCF】自定义错误处理(IErrorHandler接口的用法)

    当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...

  7. [WCF]缺少一行代码引发的血案

    这是今天作项目支持的发现的一个关于WCF的问题,虽然最终我只是添加了一行代码就解决了这个问题,但是整个纠错过程是痛苦的,甚至最终发现这个问题都具有偶然性.具体来说,这是一个关于如何自动为服务接口(契约 ...

  8. 【原创经验分享】WCF之消息队列

    最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...

  9. Ajax使用WCF实现小票pos机打印源码

    通过ajax跨域方式调用WCF服务,实现小票pos机的打印,源码提供web方式,客户端方式测试,服务驻留右侧底部任务栏,可控制服务开启暂停,用户可自定义小票打印模板,配合零售录入. qq  22945 ...

随机推荐

  1. Zepto 使用中的一些注意点(转)

    http://www.zeptojs.cn/     zepto英文站在线文档 http://www.css88.com/doc/zeptojs_api/       zepto中文站在线文档 htt ...

  2. js bool true false 比较

    .想到一个好玩的,运行如下 javascript :  if ('0') alert("'0' is true");  if ('0' == false) alert(" ...

  3. redhat+11g+rac 安装数据库软件时只有一个节点可选

    在安装数据库软件时,只能检测到一个节点 650) this.width=650;" title="捕获.JPG" src="http://s3.51cto.co ...

  4. Pomelo框架

    一个典型的多进程MMO运行架构, 如下图所示: pomelo框架的组成如图所示: 架构把游戏服务器做了抽象, 抽象成为两类:前端服务器和后端服务器, 如图: 前端服务器(frontend)的职责: 负 ...

  5. MyBatis 一级、二级缓存

    一级 默认session就有一级缓存,session有C/U/D操作或者session.clearCache();session.commit();都会清空缓存: 二级在mapper.xml中添加&l ...

  6. asp.net客户端IP跟踪

    /// <summary> /// 获取客户端IP地址(无视代理) /// </summary> /// <returns>若失败则返回回送地址</retur ...

  7. 正则表达式之一:TSQL注释的查找

    最近自己做了个小项目,涉及到了大量的正则表达式匹配和处理,在这里也和大家分享一下. 我相信接触过SQL Server数据库的很多朋友都知道,它是以"--"开头来进行注释的,但你觉得 ...

  8. 【java设计模式】之 工厂(Factory)模式

    1.工厂模式的定义 工厂模式使用的频率非常高,我们在开发中总能见到它们的身影.其定义为:Define an interface for creating an object, but let subc ...

  9. WinForm DataGridView控件、duck布局

    1.DataGridView控件 显示数据表 (1)后台数据绑定: List<xxx> list = new List<xxx>(); dataGridView1.DataSo ...

  10. 8个新鲜的PHP常用代码

       /**      * +----------------------------------------------------------      * 生成UUID 单机使用      * ...