其他分享
首页 > 其他分享> > 手把手wcf简单实例

手把手wcf简单实例

作者:互联网

WCF是微软为构建面向服务的应用程序所提供的统一编程模型。

下面通过一个简单的服务示例来认识WCF
1.新建项目,名称 XfServer,解决方案名称 XfStudy,模板选择类库,选择.NET Framework版本


2.修改Class1.cs文件名称为 IFirstService.cs
3.添加引用 System.ServiceModel
4.修改IFirstService.cs代码如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
namespace XfServer
{
    [ServiceContract]
    public interface IFirstService //定义接口
    {
        [OperationContract]
       String GetData(String name); //不需要public
    }
}

我们定义了一个IFirstService接口,注意在接口上申明了ServiceContract特性,即服务契约,表明该接口是一个服务。方法上声明了OperationContract特性,表示该方法是IFirstService的一个服务方法,客户端可远程调用该方法。

5.添加一个新类,文件名为FirstService.cs,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace XfServer
{
   public class FirstService : IFirstService//实现接口
    {
     public   string GetData(String name)//需要public
        {
            return String.Format("Hello {0},Welcome To WCF!", name);
        }
    }
}
整体目录架构如下:

到此我们的服务代码已经编写完成,下面我们必须为服务提供一个运行的宿主,通过该宿主程序来启动我们的服务。
6.在同一解决方案下新建一个项目,名称为Host,类型为控制台应用程序
7.Host项目中添加引用,引用项目XfServer,然后再添加引用:System.ServiceModel
8.修改Program.cs代码如下:

using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using XfServer;
namespace Host
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(FirstService)))
            {
                host.Open();
                Console.WriteLine("服务已启动,按任意键中止...");
                Console.ReadKey(true);
                host.Close();
            }
        }
    }
}

下面我们为服务指定地址及绑定,本步骤可通过WCF的管理工具,或直接编写配置文件来完成。我们先采用手工编写配置文件的方式:
9.修改app.config内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <services>
            <service name="XfServer.FirstService" behaviorConfiguration="behaviorConfiguration">
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8000/"/>
                    </baseAddresses>
                </host>
                <endpoint address="" binding="basicHttpBinding" contract="XfServer.IFirstService"></endpoint>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="behaviorConfiguration">
                    <serviceMetadata httpGetEnabled="true"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

编译生成,以上,我们已经实现了服务以及为服务提供了一个运行宿主,即契约部分已经完成。

10.设置Host项目为启动项目,启动调试。控制台上显示服务已启动后,打开浏览器输入服务地址:http://localhost:8000/ ,浏览器中会打开我们的服务页面,这表示我们的服务已经启动成功,客户端可通过该地址访问我们的服务了。
下面,我们将创建一个客户端来访问我们的服务
11.在同一解决方案下新建一个项目,名称为Client,类型为控制台应用程序


12.我们将使用微软的svcutil工具生成FirstService服务的客户端代理类,通过开始菜单/Microsoft Visual Studio 2019/Visual Studio Tools/Visual Studio 2019命令提示,启动命令环境。
13.确认FirstService服务已启动
14.切换当前路径到解决方案目录:
cd D:\c#\Xfstudy
16.输入命令:
svcutil http://localhost:8000/?wsdl /o:FirstServiceClient.cs
执行成功后,会在解决方案目录下生成两个文件:FirstServiceClient.cs 和output.config,将这两个文件拷贝到client目录中。
16.中止Host项目的调试,回到Client项目,选择添加 现有项 ,添加FirstServiceClient.cs。

17.删除原来的app.config,output.config 改名为app.config。
18.Client项目中添加引用,选择System.ServiceModel
19.修改program.cs代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            String key = "";
            while (String.Compare(key, "Q", true) != 0)
            {
                FirstServiceClient client = new FirstServiceClient();
                Console.WriteLine(client.GetData(key));
                key = Console.ReadLine();
            }
        }
    }
}

20.重新生成解决方案,运行 honst,运行client。Client将调用FirstService服务GetData方法,返回一个字符串。输入q退出Client。(管理员身份运行)

 

 

 

 

 

标签:服务,String,手把手,System,实例,wcf,cs,using,IFirstService
来源: https://blog.csdn.net/delphi863/article/details/122036937