教程:承载和运行基本的WindowsCommunicationFounda

极速动力1年前帮助231

本文内容

教程介绍创建基本(WCF)应用程序所要完成的五个任务中的第三个任务。有关教程概述,请参阅教程:应用程序入门

创建WCF应用程序所要完成的下一个任务是在控制台应用程序中承载一个WCF服务。WCF服务公开一个或多个终结点,其中的每位终结点公开一项或多项服务操作。服务终结点指定以下信息:

本教程介绍怎样执行下述操作:

创建并配置用于承载服务的控制台应用项目

在中创建一个控制台应用项目:

在“文件”菜单中,选择“打开”>“项目/解决方案”,之后浏览到当初创建的解决方案(.sln)。选择“打开”。

从“视图”菜单中选择“解决方案资源管理器”。

在“解决方案资源管理器”窗口中,选择“”解决方案(底部节点),之后从快捷菜单中选择“添加”>“新建项目”。

在右侧的“添加新项目”窗口中,选择“C#”或“Basic”下的“桌面类别

选择“控制台应用(.NET)”模板,之后输入“”作为名称。选择“确定”。

将“”项目中的引用添加到“”项目:

在“解决方案资源管理器”窗口中,选择“”项目下的“”文件夹,之后从快捷菜单中选择“添加引用”。

在“添加引用”对话框中,在窗口右侧的“项目”下选择“解决方案”。

在窗口的中间部份选择“”,之后选择“确定”。

此操作将使“”项目中定义的类型可用于“”项目。

将“”项目中的引用添加到.程序集:

在“解决方案资源管理器”窗口中,选择“”项目下的“”文件夹,之后从快捷菜单中选择“添加引用”。

在“添加引用”窗口中右侧的“程序集”下,选择“框架”。

依次选择“.”、“确定”。

选择“文件”>“全部保存”以保存解决方案。

添加代码承载服务

若要承载服务,请添加代码以执行以下步骤

为基址创建一个URI。创建一个用于承载服务的类实例。创建服务终结点。启用数据交换。打开服务主机以侦听传入的消息。

对代码进行以下修改

打开“”项目中的“.cs”或“.vb”文件,将其代码替换为以下代码:

usinG System;
using System.ServiceModel;
using System.ServiceModel.DescrIPtion;
using GettingStartedLib;
namespace GettingStartedHost
{
    class Program
    {
        static void Main(string[] args)
        {
            // Step 1: Create a URI to serve as the base address.
            Uri baseAddress = new Uri("http://localhost:8000/GettingStarted/");
            // Step 2: Create a ServiceHost instance.
            ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
            try
            {
                // Step 3: Add a service endpoint.
                selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");
                // Step 4: Enable metadata exchange.
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                selfHost.Description.Behaviors.Add(smb);
                // Step 5: Start the service.
                selfHost.Open();
                Console.WriteLine("The service is ready.");
                // Close the ServiceHost to stop the service.
                Console.WriteLine("Press  to terminate the service.");
                Console.WriteLine();
                Console.ReadLine();
                selfHost.Close();
            }
            catch (CommunicationException ce)
            {
                Console.WriteLine("An exception occurred: {0}", ce.Message);
                selfHost.Abort();
            }
        }
    }
}

Imports System.ServiceModel
Imports System.ServiceModel.Description
Imports GettingStartedLib.GettingStartedLib
Module Service
    Class Program
        Shared Sub Main()
            ' Step 1: Create a URI to serve as the base address.
            Dim baseAddress As New Uri("http://localhost:8000/GettingStarted/")
            ' Step 2: Create a ServiceHost instance.
            Dim selfHost As New ServiceHost(GetType(CalculatorService), baseAddress)
           Try
                ' Step 3: Add a service endpoint.
                selfHost.AddServiceEndpoint( _
                    GetType(ICalculator), _
                    New WSHttpBinding(), _
                    "CalculatorService")
                ' Step 4: Enable metadata exchange.
                Dim smb As New ServiceMetadataBehavior()
                smb.HttpGetEnabled = True
                selfHost.Description.Behaviors.Add(smb)
                ' Step 5: Start the service.
                selfHost.Open()
                Console.WriteLine("The service is ready.")
                ' Close the ServiceHost to stop the service.
                Console.WriteLine("Press  to terminate the service.")
                Console.WriteLine()
                Console.ReadLine()
                selfHost.Close()
            Catch ce As CommunicationException
                Console.WriteLine("An exception occurred: {0}", ce.Message)
                selfHost.Abort()
            End Try
        End Sub
    End Class
End Module

有关此代码的工作原理的信息,请参阅。

更新项目属性:

在“解决方案资源管理器”窗口中选择“”文件夹,之后从快捷菜单中选择“属性”。

在“”属性页上,选择“应用程序”选项卡:

在“文件”菜单中选择“全部保存”。

验证服务是否正常运行

生成解决方案,之后在中运行“”控制台应用程序。

必须以管理员特权运行该服务。因为是以管理员特权打开的,因而在中运行“”时,应用程序也将以管理员特权运行。或则,可以管理员身分打开一个新的命令提示符(从快捷菜单中选择“更多”>“以管理员身分运行”)并在其中运行“.exe”。

打开Web浏览器并通过:8000//浏览到服务的页面

备注

这种服务须要拥有适当的权限,便于才能在计算机上注册HTTP地址以进行侦听。管理员账户具有此权限,但对于非管理员账户来说,必须授予对HTTP命名空间的权限。有关怎样配置命名空间预留的详尽信息,请参阅配置HTTP和https

服务承载程序步骤

下边介绍了你添加的用于承载服务的代码中的步骤:

重要

添加WCF服务库时,假如你通过启动服务主机对其进行调试,将为你承载该库。为了防止冲突,可以制止承载WCF服务库。

在“解决方案资源管理器”中选择“”项目,之后从快捷菜单中选择“属性”。选择“WCF选项”,并取消选中“调试同一解决方案中的另一个项目时启动WCF服务主机”。

后续步骤

在本教程中,你了解了怎样执行以下操作:

请继续学习下一篇教程,了解怎样创建WCF顾客端。

教程:创建WCF顾客端

相关文章

探索空间服务器:无限查询的妙用

空间服务器:一般是集群管理,可以实现组件之间的依赖关系和资源隔离,比如阿里云这种,每个集群管理一个服务器,其他的资源隔离。负载均衡:集群内部的用户可以相互访问,并不影响其他用户访问。比如一个集群中有两...

简洁高效:慈世堂教你配置Web服务器

web服务器配置_web服务器使用-远景开发者社区-专注于开发者服务器开发与讨论的社区 无服务器,真web服务器,参考、、类 web在国内还是新兴的行业,web服务器容器化方面研究还非常不足,如在业务...

Nosql数据库服务之redis

一图解读DB的分支产品 Nosql数据库介绍 是一种非关系型数据库服务,它能解决常规数据库的并发能力,例如传统的数据库的IO与性能的困局,同样它是关系型数据库的一个补充,有着比较好的高效率与高性能。...

轻蜂加速器使用指南分享

轻蜂加速器是一款多功能的海外加速器,不同于目前市场上的定向加速器,定向加速器只针对某个方面进行加速,比如游戏加速、加速等。轻蜂加速器除了支持外服手游加速,还可以针对海淘网站、海外院校官网、国际办公应用...

免费超大网站空间,电脑手机平板全连接

免费网站空间超大,支持接口,电脑与手机、平板互联互通,与电脑同步,支持安卓、ios、、linux等主流系统,应用程序独立,可用独立的备份文件系统,拥有独立的安全组件, 他们整合了知乎之类的产品,做出个...

同服务器网站:零故障体验!

同服务器网站和应用。首先看性能,容易通过工具开关和配置增加其他服务,主要看带宽,带宽足够的话能撑住100m每秒一点问题都没有。服务器和应用有不同的搭建,性能,控制,学习成本,要求都不一样。服务器要求很...