基本 Web 编程模型示例

本示例通过实现可使用 HTTP GET 和 POST 进行调用的服务演示 Windows Communication Foundation (WCF) Web 编程模型扩展的基本元素。本示例作为承载服务并实现客户端的单个进程实现。客户端使用 HTTP 调用服务。

提示

此示例需要安装 .NET Framework 3.5 版才能生成和运行。若要打开项目和解决方案文件,需要使用 Visual Studio 2008。

程序集和命名空间

WCF Web 编程模型是在此 SDK 所包含的 System.ServiceModel.Web 程序集中实现的。此程序集派生自作为 .NET Framework 3.0 的一部分而安装的 System.ServiceModel

Program.cs 文件(包含服务和客户端)引用以下重要的命名空间:

服务

示例服务公开具有 EchoWithGetEchoWithPost 两个操作的协定,如下面的代码所示。

[ServiceContract]
public interface IService
{
   [OperationContract]
   [WebGet]
   string EchoWithGet(string s);

   [OperationContract]
   [WebInvoke]
   string EchoWithPost(string s);
}

与其他 WCF 服务一样,ServiceContractAttribute 属性应用于 IService 协定,而 OperationContractAttribute 应用于该协定的方法。此服务协定使用两个新的 Web 编程模型属性:WebGetAttributeWebInvokeAttribute。这两个属性指示如何通过 HTTP 提供协定的操作。

WebGetAttribute 属性应用于 EchoWithGet 方法,指示该方法应该在对应于 HTTP GET 方法的 URI(例如,https://localhost:8000/EchoWithGet?s=Hello, world!)上提供。WCF 客户端和 Web 浏览器可以使用此 URI。WebInvokeAttribute 应用于 EchoWithPost 方法,指示应该在对应于 HTTP POST 方法的 URI 上提供该操作。该方法的参数在 POST 请求的正文中编码为 XML。WCF 客户端和可通过 XML 正文(例如浏览器 XmlHttpRequest 对象)创建 HTTP POST 请求的 Web 客户端可以使用此 URI。有关 Web 编程模型的更多信息,请参见此 SDK 中的高级 Web 编程示例。

显式定义了服务的以下终结点。

using (WebServiceHost host = new WebServiceHost(typeof(Service), baseAddress))
{
    host.Open();

    ...
}

服务使用 WebServiceHost 类型进行承载,该类型是 ServiceHost 的新派生类型,可简化使用 Web 编程模型扩展的承载服务。WebServiceHost 会自动使用 WebHttpBindingWebHttpBehavior 在基址创建默认终结点,因此无需显式定义该终结点。此类型是用于通过 HTTP 而不使用 SOAP 直接通信的新标准绑定。此绑定支持 XML 消息和其他类型的非 XML 内容(如纯文本、图像或其他字节流)。

客户端

本示例还演示如何在客户端上使用 Web 编程模型发送 HTTP 请求。

以下客户端通道是使用 WebChannelFactory 创建的。

using (WebChannelFactory<IService> cf = new WebChannelFactory<IService>(baseAddress))
{
    IService channel = cf.CreateChannel(); 
    ...
}

WebServiceHost 类似,WebChannelFactory 会使用 WebHttpBindingWebHttpBehavior 在基址处创建默认终结点。

创建了 WebChannelFactory 后,客户端应用程序将创建到服务的通道并调用 EchoWithGet,然后调用 EchoWithPost

交互完成后,程序将等待按键。在此期间,服务仍处于有效侦听状态。按下某个键时,客户端和服务器都会关闭并且程序终止。

在运行该服务时,将显示下面的输出。

Calling EchoWithGet via HTTP GET:

Output: You said Hello, world

在此示例正在运行时,导航到“https://localhost:8000/EchoWithGet?s=Hello, world!”可在 Web 浏览器中生成同样的输出。

Calling EchoWithPost via HTTP POST:

Output: You said Hello, world

Press any key to terminate

设置、生成和运行示例

  1. 请确保已经执行了 Windows Communication Foundation 示例的一次性安装过程

  2. 若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照生成 Windows Communication Foundation 示例中的说明进行操作。

  3. 若要用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。

另请参见

任务

高级 Web 编程

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.