使用.NET应用为宿主程序来运行WCF服务

来源:互联网 发布:中国四大财团 知乎 编辑:程序博客网 时间:2024/05/24 03:54

在这个练习中,我们要把第一个练习中定义和实现的服务运行起来。更具体地说,我们会以一个.NET控制台程序为宿主程序来运行服务。

  以类似Windows服务之类的应用程序为宿主程序来运行WCF服务通常很有用。这样在布署和管理WCF服务时就不必依赖外部的宿主程序,比如IIS。

  1.在解决方案中添加一个控制台应用程序

  在这个实验中,宿主程序是一个简单的控制台应用程序。

  在这个任务中,我们将在解决方案中添加一个控制台应用程序,并给它添加成为WCF服务的宿主程序所需引用的程序集。

  (1)选择File | Add | New Project菜单项。

  (2)在New Project对话框中的Project Types部分选择Visual C# | Windows | Console Application。

  (3)在Name文本框中输入Host,如图1所示。

使用.NET应用为宿主程序来运行WCF服务
图1 Add New Project对话框

  (4)单击OK按钮。

  (5)选择File | Save All菜单项。

  添加对WCF的引用

  (6)在Solution Explorer中Host项目的References文件夹上按鼠标右键并选择Add Reference菜单项。

  (7)在.NET选项卡中选择System.ServiceModel。

  (8)单击OK按钮。

  添加对服务项目的引用

  (9)在Solution Explorer中Host项目的References文件夹上按鼠标右键并选择Add Reference菜单项

  (10)在Projects选项卡中选择DerivativesCalculatorService,如图2所示。

使用.NET应用为宿主程序来运行WCF服务
图2 添加项目引用

  (11)单击OK按钮。

  2.实现服务宿主程序

  (1)在类文件中,添加using语句来导入下面的名字空间:

  ·System.ServiceModel

  ·System.Configuration

  ·DerivativesCalculatorService

  (2)代码看起来应该如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

  using System;

  
using System.Collections.Generic;

  
using System.Linq;

  
using System.Text;

  
using System.Configuration;

  
using System.ServiceModel;

  
using DerivativesCalculatorService;

  
namespace Host

  {

  
class Program

  {

  
static void Main(string[] args)

  {

  }

  }

  }

 

wordend 相关阅读:

  • 如何在宿主程序中运行并保护WCF服务
  • 详解在IIS中配置并运行WCF服务
  • 为数据瘦身 打造定制的WCF编码器

  (3)在Main方法中添加下面的代码:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

  static void Main(string[] args)

  {

  Type serviceType
= typeof(Calculator);

  
using (ServiceHost host = new ServiceHost(serviceType))

  {

  }

  }

  第一行代码得到一个类型引用,这个类型就是具体实现WCF服务的那个类,也是我们将要在宿主程序中运行的类。

  using语句用来对ServiceHost实例进行初始化,在作用域结束时ServiceHost的Dispose()会被自动调用。

  (4)在using语句内部,我们先启动ServiceHost,然后通过等待用户输入的方式来阻止应用程序退出。

  (5)下面是完整的代码,新增的代码加亮显示。



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

  namespace Host

  {

  
class Program

  {

  
static void Main(string[] args)

  {

  Type serviceType
= typeof(Calculator);

  
using (ServiceHost host = new ServiceHost(serviceType))

  {

  host.Open();

  Console.WriteLine(
"The calculator service is available.");

  Console.ReadKey();

  }

  }

  }

  }

  (6)选择File | Save All菜单项。

  (7)在进入下一个任务之前请确保解决方案能够编译通过(按CTRL+Shift+B快捷键)。

  3.配置服务

  配置WCF服务的过程非常直接。配置选项对服务在运行的时候的行为进行控制。虽然服务的配置选项有许多,但在这个任务中我们只对服务的一些非常基本的行为进行配置。

  (1)在Solution Explorer中选中Host项目,然后在主菜单中选择Project | Add New Item菜单项。

  (2)在Project | Add New Item对话框中选择Application Configuration File模板,如图3所示。

使用.NET应用为宿主程序来运行WCF服务
图3 Add New Item对话框

  (3)不要修改文件名,新的配置文件的文件名仍然是app.config。

  (4)单击Add按钮。

  (5)用下面的XML代码替换掉新添加的app.config文件中的所有内容。下面对配置设定做了一个简单的介绍。



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<system.serviceModel>
    
<services>
      
<service name="DerivativesCalculatorService.Calculator"
               behaviorConfiguration
="metadataBehavior">
        
<endpoint
          
address="CalculatorService"
          binding
="basicHttpBinding"
          contract
="DerivativesCalculatorService.IDerivativesCalculator"/>
        
<endpoint
          
address="mex"
          binding
="mexHttpBinding"
          contract
="IMetadataExchange" />
        
<host>
          
<baseAddresses>
            
<add baseAddress="http://localhost:8000/Derivatives/" />
            
<add baseAddress="net.tcp://localhost:8010/Derivatives/" />
          
</baseAddresses>
        
</host>
      
</service>
    
</services>
    
<behaviors>
      
<serviceBehaviors>
        
<behavior name="metadataBehavior">
          
<serviceMetadata httpGetEnabled="true" />
        
</behavior>
      
</serviceBehaviors>
    
</behaviors>
  
</system.serviceModel>
</configuration>

 

  WCF配置文件的结构

  • 这一节包含了所有的WCF配置元素。

  • 服务在这一节定义。每个服务有自己的服务配置区段。

  • 这一节包含了一个WCF服务的设定。它还包含了该服务暴露的终结点。

  • 这一节用来指定服务终结点的绑定、契约和地址属性。服务通过终结点暴露给外界。

  • 这一节用来指定服务宿主程序的设定。

  • 这一节用来定义两个名为endpointBehaviors和serviceBehaviors的子集合。每个集合分别定义由终结点和服务使用的行为元素。每个行为元素通过一个独一无二的名字attribute来标识。

  • 这一节包含了为一个指定的服务所定义的所有行为。

  (6)选择File | Save All菜单项。

  (7)确保解决方案能够正常编译(选择Build | Build Solution菜单项)。

wordend 相关阅读:

  • 如何在宿主程序中运行并保护WCF服务
  • 详解在IIS中配置并运行WCF服务
  • 为数据瘦身 打造定制的WCF编码器

  4.运行服务

  我们已经定义了一个WCF服务,实现了该服务,对它进行了配置,还创建一个宿主程序来运行它。现在只要一切能够正常工作,我们的服务就可以运行并供用户使用了。

  运行WCF服务

  (1)在Solution Explorer中右键单击Host项目并选择Debug | Start new instance菜单项。这会启动命令行的服务宿主程序,看起来应该如图4所示。

使用.NET应用为宿主程序来运行WCF服务
图4 命令行的服务宿主程序

  现在服务已经运行起来了,可以供用户调用。

  验证服务

  (2)在浏览器中打开下面的URL:

  http://localhost:8000/Derivatives/

  这是我们在app.config文件中给服务指定的位置。

  注意:如果在Internet Explorer中遇到一个警告并看到一个如图5所示那样的黄色信息条,那么关掉警告对话框并在黄色的信息条上单击右键,选择Enable Intranet Settings,并在随后的确认对话框中选择Yes。

  网页中显示的是我们刚创建的服务的WCF信息页。

使用.NET应用为宿主程序来运行WCF服务
图5 Internet Explorer 7显示的信息条

  (3)单击靠近页面顶部的链接http://localhost:8000/Derivatives/?wsdl,并检查随后出现的WSDL页面。这就是服务的契约。

  (4)关闭浏览器。

  调用服务

  Visual Studio提供了一个专门用来调用服务的工具WCF Test Client。这个工具不但可以查看一个已经发布的服务的接口,而且提供了一个图形界面来让我们调用服务。

  (1)打开Visual Studio命令行窗口。

  具体步骤:

  在Windows的开始菜单中选择下面的菜单项:

  Start | All Programs | Microsoft Visual Studio 2008 | Visual Studio Tools | Visual Studio 2008 Command Prompt.

  (2)在命令行窗口输入:WcfTestClient.exe

  程序随即启动。

  (3)在WCF Test Client中选择File | Add Service菜单项。

  Add Service对话框出现。

  (4)根据我们在宿主程序中为服务配置的地址,在对话框中输入:

  http://localhost:8000/Derivatives/

  (5)单击OK按钮。

  (6)WCF Test Client添加了一个对该WCF服务的引用,并更新了用户界面让我们能够调用服务,如图6所示。

使用.NET应用为宿主程序来运行WCF服务
图6 WCF Test Client

  用户界面右边的上半部分显示的是发往服务的请求,下半部分显示的是调用服务所得到的响应。

  (7)在窗口的Request部分(上方),将方法的days参数设为5天。

  (8)另外两个参数保持不变,仍然为null。我们的服务会忽略这两个参数。关于如何输入WCF Test Client将要发送的请求,请参见图15。

  (9)单击Invoke按钮。

  现在请求已经被发往WCF服务,得到的响应会在窗口的Response部分显示。

  (10)重复调用服务几次。

  (11)关闭WCF Test Client应用程序。

  (12)关闭Visual Studio命令行窗口。

  (13)返回正在运行服务宿主程序的命令行窗口并按Enter键,来关闭宿主程序。

  (14)返回Visual Studio。

  (15)选择Window | Close All Documents菜单项来关闭所有窗口。

wordend 相关阅读:

  • 如何在宿主程序中运行并保护WCF服务
  • 详解在IIS中配置并运行WCF服务
  • 为数据瘦身 打造定制的WCF编码器
原创粉丝点击