教程:承载和运行基本的WindowsCommunicationFounda
本文内容
本教程介绍创建基本(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顾客端