WCF--建立简单的WCF服务

在VS2010里建立一个最简单的WCF服务,基本流程如下:

一:新建WCF应用

首先,新建一个WCF服务的应用,如下图所示

建立完成之后,VS将自动生成一个最简单的WCF工程,在这个应用中,包含了最基本Contract、Service。

工程如下:

不需要编辑任何文件,直接编译生成,得到一个WcfService1.dll文件

二、WCF应用中的契约(Contract)

在生成的WCF工程中,IService1.cs中为Contract(本例中契约和服务放在同一个工程下了,实际上也可以分为两个工程),代码如下:

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string GetData(int value);

    [Operation Contract]
    CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
}

// Use a data contract as illustrated in the sample below to add composite types to service operations.
[DataContract]
public class CompositeType
{
    bool boolValue = true;
    string stringValue = "Hello ";
    [DataMember]
    public bool BoolValue
    {
        get {return boolValue; }
        set {boolValue = value; }
    }

    [DataMember]
    public string StringValue
    {
        get {return stringValue; }
        set {string Value = value; }
    }
}

可以看到,声明了服务契约IService1,以接口形式声明,其中还包括两个操作契约GetData以及GetDataUsingDataContract。还声明了数据契约CompositeType,以类的形式声明,包含两个数据成员BoolValue和StringValue。

三、WCF应用中的服务功能实现(ServiceBehavior)

在生成的WCF应用中,Service1.svc.cs中为“ServiceBehavior”(本例中契约和服务放在同一个工程下了,实际上也可以分为两个工程),代码如下(Service1.svc还有其它作用,后面再说):

public class Service1 : IService1
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}",value);
    }

    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {
        if (composite== null)
        {
            throw new ArgumentNullException("composite");
        }
        if (composite.BoolValue)
        {
            composite.StringValue+= "Suffix";
        }
        return composite;
    }
}

可以看到,这个Service1类实现了在契约中声明的IService1接口(服务契约),也使用到了CompositeType类(数据契约);实现了GetData以及GetDataUsingDataContract这两个服务契约中功能,这些功能即为WCF服务允许外部程序进行调用的功能。

四、寄宿(Host)WCF服务

有2种常见的寄宿方式:

1)一种是为一组WCF服务创建一个托管的应用程序,通过手工启动程序的方式对服务进行寄宿,所有的托管的应用程序均可作为WCF服务的宿主,比如 Console应用、Windows Forms应用和ASP.NET应用等,我们把这种方式的服务寄宿方式称为自我寄宿(Self Hosting)。

2)另一种则是通过操作系统现有的进程激活方式为WCF服务提过宿主,Windows下的进程激活手段包括IIS、Windows Service或者WAS(Windows Process Activation Service)等

无论采用哪种寄宿方式,在为某个服务创建 ServiceHost的过程中,WCF框架内部会执行一系列的操作,其中最重要的步骤就是为服务创建服务描述(Service Description)

本例以第一种为例,建立一个WinForm应用作为托管程序,在VS2010中,建立一个普通的WinForm程序(以frameword4.0为例),如下图:

在工程中,添加对System.ServiceModel的引用,并添加对刚才生成的WcfService1.dll的引用,然后在Form上添加一个Button和一个Label控件,如下图:

在WinForm工程中添加对要托管的WCF服务的描述,既可以通过代码实现,也可以通过工具生成。本例在VS2010下,通过Tools-WCF Service Configeration Editor工具生成。

点开后,通过菜单的File-New Config新建一个描述文件,然后点击Service页面的Create a New Service,弹出如下界面:

点击Browse...按钮,选中刚才生成的WcfService1.dll,并选中其中的Service1服务,点击下一步,弹出如下界面:

这个界面中要选择使用的契约,默认即可,点击下一步,弹出如下界面:

这个界面中要选择使用的网络通讯协议,选择最通用的HTTP协议,并在下一个界面中选择基本的Http服务(Basic WebService interoperablitity),

在接下来的界面中,输入访问地址,其它程序可以通过这个地址来访问本WCF服务。

完成这一步之后,接下来还有一些设置,我也不清楚用途,略去,最后点击File-Save,生成一个App.config文件。这里把该文件贴上来:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="NewBehavior0">
                    <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8585/wcf1/metadata" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="NewBehavior0" name="WcfService1.Service1">
                <endpoint address="" binding="basicHttpBinding"
                    bindingConfiguration="" name="ep1" contract="WcfService1.IService1" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8585/wcf1" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

把该App.config文件放在与WinForm工程的根目录下(与Form1.cs同一目录),还需要在VS中将该文件加入到工程中。

添加Button控件的处理函数:

private void button1_Click(objectsender, EventArgs e)
{
    System.ServiceModel.ServiceHosthost =new System.ServiceModel.ServiceHost(typeof(WcfService1.Service1));
    host.Open();
    this.label1.Text= "opened";
}

编译运行,点击界面中的Button控件,即可以将该WCF服务寄宿到该Frm中(关闭窗体后WCF服务结束)。

注:如果运行时报这个错误(HTTP could not register URL http://+:8585/wcf1/. Your process does not have access rights to this namespace),有可能是权限不足导致,需要使用管理员权限运行。

五、在客户端访问并调用WCF服务

新建一个WinFrm工程(不要关闭刚才的寄宿界面),在VS菜单中点击Project-Add Service Reference..项,输入刚才在寄宿界面中定义的地址,就可以添加对该WCF服务的引用,如下图:

在程序中使用如下代码,即可以调用WCF服务中的GetData方法:

ServiceReference1.Service1Clientaa=newServiceReference1.Service1Client();
MessageBox.Show(aa.GetData(2));

六、总结

WCF一个简单的应用,刚刚接触,以后还有更多机会去深入学习。

时间: 2024-08-26 04:32:34

WCF--建立简单的WCF服务的相关文章

WCF服务二:创建一个简单的WCF服务程序

在本例中,我们将实现一个简单的计算服务,提供基本的加.减.乘.除运算,通过客户端和服务端运行在同一台机器上的不同进程实现. 一.新建WCF服务 1.新建一个空白解决方案,解决方案名称为"WCFSolution". 2.解决方案右键->添加->类库项目,类库名称为CalculateWcfService. 3.创建服务契约 WCF采用基于契约的交互方式实现了服务的自制.服务契约:是相关操作的集合.契约就是双方或多方就某个关注点达成的一种共识,是一方向另一方的一种承诺.签署了某个

一个简单的WCF服务

以订票为例简单应用wcf程序,需要的朋友可以参考下 WCF实例(带步骤) 复制代码代码如下: <xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> 本篇转自百度文档,自己试过,确实可以用. 以订票为例简单应用wcf 新建一个wcf服务应用程序 在IService1.cs定义服务契约 复制代码代码如下: namespace WcfDemo { // 注意: 如果

一个简单的WCF服务的编写和调用

1.如图所示:这个简单的WCF Demo中主要包括3个文件:1个接口(定义了该服务提供的方法).1个实体类 .一个.Svc文件(方法的实现过程) 2.编写好服务的代码之后,编辑WCF配置文件,如果所示: 3.在客户端的终结点和绑定中写好配置信息,保存. 4.按F5运行,会调用WCF测试客户端.如果所编写的服务和配置都正常,客户端的界面是这样: 使用该工具可以测试接口中的方法返回的数据,至此一个简单的WCF服务程序就写好了.接下来就是把WCF服务发布到IIS中 5.右键解决方案,点击发布,将WCF

使用TT模板+mvc+wcf实现简单查询

伴随着春姑娘调皮的脚步,小编接手的档案管理项目也渐渐步入正轨,从开始的需求分析,到使用Axure画原型图,再到使用powerdesigner设计实体,生成数据库,一直到昨天刚刚通了一条线,这一路走来,小编懂得了很多,无路学习还是和团队小伙伴的交流合作,有时候,总是会因为大家意见不统一,搞的大家吹胡子瞪眼,但有时也会因为某件事情圆满成功而欢欣鼓舞,小组中最开心的事儿莫过于有人开会迟到买吃的了,哈哈,暴露了小编的本质,开头说了这么多,接下来,小编就跟分享一下,如果利用TT模板+mvc+wcf实现简单

WCF入门简单教程(图文) VS2010版

在这个例子中我们将使用VS 2010 创建一个WCF服务,其中会了解 [DataContract] [ServiceContract] 等特性.  内置的 WCFSVCHost ,并使用"WCF测试客户端"来测试我们创建的服务. 注意下面的所有类.接口及方法都添加了public 的访问级别. 一,建立一个WCF服务库 创建一个WCF服务库项目 在解决方案中会自动为我们生成两个类文件"IService1.cs"和"Service1.cs". 这两个

WCF(一) 简单的认知

为什么要学习WCF,WCF有哪些优势 WCF合并了Web服务..net Remoting.消息队列和Enterprise Services的功能并集成在Visual Studio中. WCF专门用于面向服务开发. WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的对比图如下: WCF与其他分布式技术对比表 WCF程序结构 契约(Contracts):   

第一节 构建一个简单的WCF应用

先吐个槽,到目前为止接触的东西也就是些ado.net.select.delete.update.create.临时表的批量操作.及稍微复杂点的几个表之间查询再带几个excel导入导出 然后会点前端的js.jquery等,所以在公司目前薪水并不高(能在广州生活下去吧,什么买车买房的想都别想),拿自己身边的同志一比较感觉心里不怎么平衡,凡事还是得靠自己 自强才是硬道理,就吐到这里吧!开始我的wcf之旅吧 本人理工科类型的文笔很烂 希望各位大神不要喷小弟哦(参照的书本:WCF全面解析) 咱们还是从小学

WCF初探-14:WCF服务协定

前言: 在前面的文章中,我们定义的服务协定上都会有一个ServiceContract的特性来修饰,这是因为服务契约的实现要靠ServiceContractAttribute 属性定义,然后使用一个或多个类(或接口)方法中的 OperationContractAttribute 属性定义协定的服务操作. 实现服务协定后并将其与WCF 绑定和 EndpointAddress 对象一起使用时,此服务协定将公开以供客户端使用. 公开的信息由 ServiceContractAttribute 表示,其接口

关于WCF引用方式之WCF服务寄宿控制台

1.创建解决方案WCFService 依次添加四个项目,如上图,Client和Hosting为控制台应用程序,Service和Service.Interface均为类库. 2.引用关系 Service.Interface:定义服务契约(Service Contract)接口,引用WCF核心库System.ServiceModel.dll; Service:定义服务的项目,由于需要实现具体的服务,而服务契约在Service.Interface中,所以要引用Service.Interface项目;