WCF开发服务端应用程序

一、WCF基本介绍:

1.WCF是什么?

 WCF(Windows Communication Foundation)它是数据通信的应用程序框架,是一款以Windows通信为基础的应用平台。

2.WCF有什么好处?

  WCF优点概括:统一性、互操作性、安全可信赖、兼容性。

  WCF可以解决服务与服务之间的通信问题。

  WCF可以分布式提供计算可管理的方法,并为服务提供直接的支持。

  WCF可以同过进程或不同系统、通过本地或通过Internet进行客户端和服务端之间的数据传输。

  例如:做某个系统就可以充分体现其优势,我们将系统中的每个功能划分成一个模块,每个模块都做成一个客户端和一个服务端。这样在编写程序的时候,就不会因为几个人在做一个系统是产生冲突,通过分布式的管理方式,有效的将冲突原因避免了。

3.WCF能为开发人员带来怎样的便利

  WCF为程序员提供了丰富的功能,托管、服务实例、异步、安全和事务管理。除此之外,WCF对标准的协议还进行了封装和定义,把程序员从繁琐的通信和格式分离出来,让程序员能专注业务逻辑。

二、开发WCF应用程序:

1.新建项目:

项目结构如下:

将Service1.svc设为起始页,按F5运行,出现出下界面:

这是系统自己建的WCF应用服务,我们添加自己的WCF服务,选中项目-->鼠标右键-->添加-->新建项:

项目结构如下:

然后可以看到IMyService.cs代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFDemo
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IMyService”。
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        void DoWork();
    }
}

对的,这是一个接口,接口中自动创建了个DoWork的方法,接口中的方法不能有实现,具体实现在MyService.svc.cs中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFDemo
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“MyService”。
    public class MyService : IMyService
    {
        public void DoWork()
        {
        }
    }
}

可以看到MyService继承了IMyService这个接口,并实现了其中的DoWork方法。我们在IMyService接口中添加一个自己的方法,并在继承它的类中去实现它:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFDemo
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IMyService”。
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        void DoWork();
        string SayHello(string name);
    }
}

在继承它的类中去实现这个方法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFDemo
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“MyService”。
    public class MyService : IMyService
    {
        public void DoWork()
        {
        }

        public string SayHello(string name) {
            return "Hello!!" + name;
        }
    }
}

然后将MyService.svc设为起始页,运行结果如下:

并没有看到我们自己写的SayHello的方法,细心的你肯定已经看到问题了,我们在接口中定义方法的时候并没有在方法的头部添加[OperationContract],添加后:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace WCFDemo
{
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IMyService”。
    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        void DoWork();

        /// <summary>
        /// 自定义的打招呼的方法
        /// </summary>
        /// <param name="name">名字</param>
        /// <returns>打招呼内容</returns>
        [OperationContract]
        string SayHello(string name);
    }
}

再运行:

可以看到我们自己定义的SayHello方法,双击SayHello方法:

在请求窗口中的值中输入参数“科比”,然后点击“调用”,就可以看到返回的打招呼内容!!

注:

接口上方自动添加的[ServiceContract],来说明接口是一个WCF的接口,如果不加的话,将不能被外部调用。

自定义方法上手动添加的[OperationContract],来说明该方法是一个WCF接口的方法,如果不加的话,将不能被外部调用。

这点和WebService中自定义方法上添加[WebMethod]很相似 。

2.WCF应用程序的发布过程:(和WebService的发布过程一致)

选中项目-->鼠标右键-->发布:

发布方法选择文件系统-->选择发布位置-->点击发布:

发布成功!!

3、在IIS上部署WCF:(与在IIS上部署WebService一致)

  安装iis参考:https://jingyan.baidu.com/article/19192ad853224ce53f570748.html

打开IIS管理器:

选中网站-->鼠标右键-->添加网站:

物理路径选择发布WCF程序时的文件夹,端口不要和部署的其他程序冲突。

点击右侧浏览:

如下错误:

 以上错误是由于发布WCF程序的时候我直接发布在新建在桌面的文件夹导致的,将该文件夹移动到如下目录:

一般部署在IIS上的程序都放在该目录。点击右侧基本设置:

重新选择物理路径,再浏览:

发布成功!!

4.在客户端调用WCF服务:(与WebService一致)

新建一个web空项目来测试客户端调用WCF服务:

选中项目-->鼠标右键-->添加服务引用:

以上地址填在IIS上浏览成功时的地址,如下:

点击前往可以看到我们自定义的WCF服务,点击接口就可以看到我们自定义的方法,如下:

命名空间可以修改,可以不改,你开心就好。

添加成功后的项目结构如下:

新建一个页面来测试下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
//引用WCF服务的命名空间
using WCFClient.WCFService;
namespace WCFClient
{
    public partial class Index : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            MyServiceClient client = new MyServiceClient();
            string msg = client.SayHello("科比");
            Response.Write(msg);
        }
    }
}

其中MyServiceClent对象是在添加WCF服务的时候生成的服务端MyService类的客户端代理类,一般客户端代理类名称都会是:WCF服务名称+Client

浏览结果如下:

客户端调用成功!!

以上就是本机调用,若要在同一局域网内的其他机器上调用,只需修改绑定地址,如下:

改成本机的ip地址,则可以在同一局域网内的其他机器调用;若要供不在同一网内的机器调用,则需要填写本机的外网IP地址,查看方法:http://ip.cn/

填写这个IP就可以供外网访问,当然本机需要开放对应的端口。

以上就是WCF服务应用程序的创建、发布、部署、调用的简单实例,若有错误,欢迎指教。

WCF的开发和WebService的开发很相似可以对比学习。C#创建webservice并发布,部署到iis,客户端调用

posted @ 2017-09-21 17:34  #疆先绅#  阅读(472)  评论(0编辑  收藏  举报