初识WCF之使用配置文件部署WCF应用程序

     二月份的开头,小编依旧继续着项目开发之路,开始接触全新的知识,EF,WCF,MVC等,今天小编来简单的总结一下有关于WCF的基础知识,学习之前,小编自己给自己提了两个问题,WCF是什么?WCF能用来做什么?WCF具有哪些优点?带着这样的问题,小编开始进行了一番搜索,一下是小编整理的结果。

        WCF是什么?

        WCF(Windows Communication Foundation)是用于构建面向服务的应用程序的框架 ,是由微软发展的一组数据通信的应用程序开发接口。根据MSDN上的定义:WCF为.NetFramework提供了一个基础,使其能够编写代码,以在组件、应用程序、系统之间进行通信。WCF的设计遵循的是面向服务的原则。服务是指可以通过消息与之进行交互的一段代码。服务是被动的。它们等待传入消息之后才开始工作。客户端是发起者,客户端将消息发送给服务来请求工作。

 
 
         WCF能用来做什么?

        小编查阅了相关资料,形成了小编自己的对wcf能用来做什么的认识,也许不是很恰当,有不同意见的小伙伴可以相互交流讨论,说个小故事,long time ago,有一户人家,拥有一家小商店,靠卖些花卉过日子,日子不算富裕,但也是吃得饱,穿得暖,可是随着社会的飞速发展,竞争是如此激烈,为了生存,这家人不得不自己进货,把货堆到自己的房间内,如果顾客需要,他们有时还不得不给顾客送货,总而言之,他们将所有该干的活都干了,只为了能赚钱养家,这就是生活。再说我们的程序,一个web程序或者一个winform程序,简单模式的程序,我们通常都与那个花店的老板一样,把所有的功能都集中到这个程序里面,在简单的状况下,这很好。

       花店生意越来越好,老板的资金慢慢雄厚了,她注意到了卖其他东西比花卉更赚钱,比如说家电、服装。于是,老板一口气又开了几家店。生意规模越来越大,钱也越赚越多,老板心花怒放。然而好景不长,亚洲金融风暴来袭,利润率急剧下降。老板忧心忡忡,既然外部开源不太可能,那就看看内部能不能节流了。老板考察一番,注意到,为了销售,每个店都配置了一个仓库,每个店都配置了一帮送货的人马,这,是不是太浪费了。于是,老板将所有的仓库撤销,成立了一个总仓库,不管是花卉,家店,服装,都可以存储到这个仓库。管理一个仓库的费用比管理N个仓库的费用显然是要少很多的。然后,每个店的送货人员都辞掉,另外成立一个运输公司,专门负责送货,不管是花卉还是家店亦或服装,装到纸箱后,她们都是一个样。经过这么一折腾,成本一下就降了下来,而且还便于管理了,真是一举两得,老板又绽放了笑容。再回到我们的程序上来,当程序涉及的范围越来越大时,也许就要考虑将服务分离出去。WCF是应对分布式开发的,就如花店老板,生意大了后,她就是个分布式的了,这边一家花卉店,那边一家服装店,他们之间有区别,卖的东西不同,也有共性,都是卖东西,不管是哪家店,他们都需要仓库,都需要送货。这时,你就可以单独成立公司,只提供这两种服务。如果写成程序,那么就如同你开发了一个运输的WCF,把这个服务放在服务器上,这样不管是谁,是Web程序也好,是Winform程序也好,只要接口对应,理解你的服务内容条款(服务契约),都可以要求你这个服务模块提供标准的服务。

        WCF的优点?

        WCF是提供统一的,可用于建立安全、可靠的面向服务的应用的高效开发平台。WCF具有如下的优势:  
        1、统一性
        2、互操作性
        3、安全与可信赖
        4、兼容性

        介绍完了wcf的一些基本知识以后,我们开始来实践一下,让理论知识在动手实践中牢牢掌握,小编简单来介绍一下如何使用配置文件部署WCF应用程序,在敲例子之前,先来简单介绍一个基本知识点服务三要素和配置服务概要。服务三要素,简单概括来说就是ABC,A--Adress在哪里,包含传输方式信息;B--Binding怎么实现,与地址的传输方式要匹配,C--Contract做什么,服务契约。好了接着,我们开始敲例子,打开VS建立项目,建立完成之后,如下图所示:

                     

          接着,我们来编写代码,首先我们来编写WCFServiceDemo中的接口,代码如下:

      

<span style="font-size:18px;"><span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.ServiceModel;
namespace WCFServiceDemo
{
    [ServiceContract]   //定义服务接口
    public interface IHelloService
    {
        [OperationContract]
        //返回当前服务器端的时间
        DateTime getDateTime();
        [OperationContract]
        //返回一组数据
        DataTable getUserInfo();
    }
}
</span></span>

         WinformHello中的HelloService,代码如下所示:

<span style="font-size:18px;"><span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
using WCFServiceDemo;

namespace WinformHello
{
    public class HelloService:WCFServiceDemo.IHelloService //实现接口
    {
        //获取服务端的系统时间
        public DateTime getDateTime()
        {
            return DateTime.Now;
        }

        //获取当前用户信息
        public System.Data.DataTable getUserInfo()
        {
            //创建连接对象
            string connstring = @"Data Source=.;Initial Catalog=newssystem;User ID=sa;pwd=123456";
            SqlConnection conn = new SqlConnection(connstring);
            SqlDataAdapter sda = new SqlDataAdapter("select * from category", conn);

            DataTable dt = new DataTable();
            sda.Fill(dt);//通过Fill方法将数据填充
            return dt;

        }
    }
}
</span></span>

        接着就是我们的配置文件了,代码如下:

<span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8" ?>
<configuration>
	<system.serviceModel>
		<services>
			<service name="WinformHello.HelloService" behaviorConfiguration="TestBehavior">
				<host>
					<baseAddresses>
						<add baseAddress="http://localhost:8080/Hello"/>
			        </baseAddresses>
				</host>
				<endpoint address="" binding="basicHttpBinding" contract="WCFServiceDemo.IHelloService"></endpoint>

			</service>
		</services>

		<behaviors>
			<serviceBehaviors>
				<behavior name="TestBehavior">
					<serviceMetadata httpGetEnabled="true"/>
				</behavior>
			</serviceBehaviors>
	    </behaviors>
	</system.serviceModel>
</configuration></span></span>

       运行效果如下:

       
       注意,在运行这个程序的过程中有可能会出错,这个时候只需要,右击vs的快捷方式,以管理员方式运行即可,重新运行程序即可,成功加载。

       小编寄语:该博文,小编主要简单的介绍了一下有关于wcf的一些基础知识,首先解决了三个基本问题,wcf是什么?用来干什么以及wcf的优点,最后使用配置文件部署了一个wcf的应用程序,由于wcf集合了几乎.NET Framework 所提供的通信方法,因此学习曲线比较陡峭,开发人员必须要针对各个部份的内涵做深入的了解,才能够操控 WCF
来开发应用程序。通信双方的沟通方式,由合约来订定。通信双方所遵循的通信方法,由协议绑定来订定。通信期间的安全性,由双方约定的安全性层次来决定。项目进行中,未完待续......

时间: 2024-11-01 04:13:33

初识WCF之使用配置文件部署WCF应用程序的相关文章

wcf-IIS部署WCF访问失败了,请教

问题描述 IIS部署WCF访问失败了,请教 我在客户端引用net.tcp://192.168.1.215:4508/VoiceWCFService.svc/mex这个路径报错<<< 未能连接到 net.tcp://192.168.1.215:4508/VoiceWCFService.svc.连接尝试的持续时间为 00:00:00.0210012.TCP 错误代码 10013: 试图以其访问权限所禁止的方式访问套接字..原因可能是,试图以跨域的方式访问某服务,而该服务的配置不支持跨域访问.

APACHE能不能部署WCF?能的话,提供方法谢谢

问题描述 APACHE能不能部署WCF?能的话,提供方法谢谢 解决方案 解决方案二:不能.只能IIS解决方案三:引用1楼cuit的回复: 不能.只能IIS 只有APACHE服务器可以用....有没什么方法的???解决方案四:不用wcf....解决方案五:引用3楼cuit的回复: 不用wcf.... 用什么好呢????解决方案六:引用4楼zhaolaoda2012的回复: Quote: 引用3楼cuit的回复: 不用wcf.... 用什么好呢???? java系的随便选啊.解决方案七:引用5楼cu

WCF随客户端软件一起发布,客户端自动识别WCF服务地址,不通过配置文件绑定WCF服务,客户端动态获取版本号

WCF发布到IIS,并有相应的SVC宿主文件客户端软件通过CLICK ONCE发布到WCF的相同目录下本例实现了:客户端自动发现WCF服务的功能 1 不通过配置文件绑定WCF服务 代码 ICallCenter proxy = null; BasicHttpBinding binding = new BasicHttpBinding();EndpointAddress address = new EndpointAddress(AppDeploymentUtils.GetWcfUri());bin

Silverlight+WCF 新手实例 象棋 回归WCF通讯应用-登陆(十八)

前四节,我们讲了通讯基础,从这节起,我们回归到项目中来,要将前面的WCF通讯知识应用进来. 之前的项目大伙没丢把,重新发下载地址:之前第3阶段代码:点此下载   我们为Chess项目的解决方案里,再添加WCF应用服务程序 由于Silverlight+WCF 新手实例 象棋 WCF通讯跨域(十五)已截图,所以这里不截图了. 步骤: 1.对着解决方案->右键->添加新建项目->选择WCF应用服务程序->输入:GameService 2.删除默认的IService1.cs和IServic

wcf服务怎样嵌入在asp.net程序上?

问题描述 asp.net程序部署在IIS上面,为了方便访问程序数据,我想把WCF服务嵌入其中.也就是asp.net部署在IIS上面后,WCF服务也自动部署好了. 解决方案

WCF开发框架形成之旅--WCF应用常见问题处理

本文继续前面几篇关于WCF开发框架的随笔,继续介绍WCF的一些经验和知识,其中主要介绍在使用WCF开发中碰到的问题以及解决方法,为自己做个记号,也为后来者提供解决思路,其中包括有动态修改 WCF配置内容.规范WCF客户端的调用和处理.  1. 动态修改WCF配置内容 由于在软件登录界面中,需要提供用户切换内网.外网的功能,而配置文件中内外网的地址配置是不一样的,因此需要动态修改应用程序的配置文件,然后更新其中节点内容,界面如下所示.   修改WCF节点的C#代码如下所示         priv

WCF分布式开发步步为赢(7):WCF数据契约与序列化

本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤.那么序列化是什么?为什么会有序列化机制?或者说它是为了解决什么问题?作用是什么?现有的.NET 序列化机制和WCF序列化机制有什么不同?我们在本节文章里都会详细介绍.本节结构:[0]数据契约[1]序列化基本概念[2].NET 序列化机制[3]WCF序列化机制[4]代码实现与分析[5]总结. 下面我们正式进入今天的学习阶

WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发

今天我们继续WCF分布式开发步步为赢(3)WCF服务元数据交换.配置及编程开发的学习.经过前面两节的学习,我们了解WCF分布式开发的相关的基本的概念和自定义宿主托管服务的完整的开发和配置过程.今天我们来详细学习WCF服务元数据交换的相关内容.WCF服务元数据究竟是什么?为什么WCF服务要暴露元数据交换节点?这些和以前的Web Service有什么关系?WCF服务元数据交换的方式有那些?我们如何实现WCF服务元数据交换,本节我们会详细讲解.全文结构如下:[1]WCF服务元数据的基本概念.[2]WC

WCF分布式开发步步为赢(14):WCF安全编程--基本概念

WCF安全机制是个非常复杂的问题,因为涉及的知识点较多,所以今天这个文 章,会分析进行WCF安全开发应该了解的哪些知识点.如何查看资料.为了更好 地理解WCF安全相关知识,我把WCF安全机制主要知识点整理为图表.本章以介绍 WCF安全机制的基础概念为主. 要学习WCF安全编程,你应该学习什么首先掌握什么基础知识?很多时候会因 为缺乏系统的安全概念,在进行WCF安全编程开发的时候,遇到很多问题,比如 所证书,这个概念相信很多初学者第一次接触的时候花费了很多时间.我当时在 做WSE安全开发的时候就查