Welcome to MSDN Blogs Sign in | Join | Help

启用WCF测试客户端(WCF Test Client)的相关技巧

微软服务器与开发工具事业部 薛在岳

 

    WCF测试客户端(WCF Test Client)是一个用来测试WCF服务程序的调试工具,能够使开发WCF服务更加方便。 本文主要讨论如何在Visual Studio中启用WCF测试客户端的相关技巧。

    在Visual Studio之外打开WCF测试客户端有两种方法:第一种方法是到其所在路径(Visual Studio安装路径\Common7\IDE\WcfTestClient.exe)双击打开。第二种方法是在“Visual Studio命令提示(Visual Studio Command Prompt)”中输入“WcfTestClient”命令,如图1所示:

CMD

图1

    Visual Studio不同的项目模板,提供了不同的WCF测试客户端启动方法。下面这张表格是Visual Studio 2010 Beta2中,与WCF相关的项目模板:
 

项目模板名称

模板位置

.NET Framework版本

WCF服务库

新建项目 -> WCF结点

3.0/3.5/4.0

WCF服务应用程序

新建项目 -> Web结点

3.0/3.5/4.0

WCF工作流服务应用程序

新建项目 -> WCF结点

4.0

WF顺序服务

新建项目 -> WCF结点

3.5

WF状态机服务

新建项目 -> WCF结点

3.5

联合服务库

新建项目 -> WCF结点

3.5/4.0

WCF服务

新建网站

3.0/3.5/4.0

表1

WCF服务库WF顺序服务WF状态机服务

    启用调试(F5)默认会启动WCF服务主机(WCF Service Host)托管项目中的服务,并且会自动启用WCF测试客户端,请看图2:

WCF Service Library

图2

    如果希望F5时,不启动WCF测试客户端,可以通过修改项目属性 -> 调试 -> 命令行参数来实现,如图3所示:

NoWCFTestClient

图3

WCF服务应用程序WCF工作流服务应用程序

    当在“解决方案资源管理器(Solution Explorer)”中,焦点选定在特定服务的.svc或.xamlx文件时,F5会启动WCF测试客户端。请看图4:

WAP

图4

    如果希望F5时始终启动IE,可以在.csproj.user文件里增加EnableWcfTestClientForSVC属性配置以禁用WCF测试客户端:

<Project>

  <ProjectExtensions>

    <VisualStudio>

      <FlavorProperties>

        <WebProjectProperties>

          <EnableWcfTestClientForSVC>False</EnableWcfTestClientForSVC>

        </WebProjectProperties>

      </FlavorProperties>

    </VisualStudio>

  </ProjectExtensions>

</Project>

    另外,在.csproj文件里还有EnableWcfTestClientForSVC属性的默认值设置。如果.csproj.user文件没有该属性的相关设置,则该属性则使用.csproj文件里默认值:

<Project>

  <ProjectExtensions>

    <VisualStudio>

      <FlavorProperties>

        <WebProjectProperties>

          <EnableWcfTestClientForSVCDefaultValue>False</EnableWcfTestClientForSVCDefaultValue>

        </WebProjectProperties>

      </FlavorProperties>

    </VisualStudio>

  </ProjectExtensions>

</Project>

    下表是.csproj.user和.csproj文件相关属性的设置和启动客户端类型的逻辑关系:

.csproj.user

文件设置

True

False

未设

未设

未设

.csproj

文件设置

True/False/未设

True/False/未设

True

False

未设

启动

客户端类型

WCF测试客户端

IE

WCF测试客户端

IE

IE

表2

    例如,在一个利用源代码控制的项目组中,.csproj.user文件不会被共享,而.csproj文件会被共享。如果只希望改变个人的WCF测试客户端的启动行为,则应该修改.csproj.user文件;如果希望改变开发这个项目的所有人的启动行为,则应修改.csproj文件。

联合服务库

    WCF测试客户端并不能对这种服务项目进行测试,所以F5时并不会自动启动WCF测试客户端。

WCF服务(网站)

    F5时不会自动启动WCF测试客户端。如果希望获得和WCF服务应用程序相同的启动行为,可以修改C:\Users\<username>\AppData\Local\Microsoft\WebsiteCache\websites.xml文件(XP/2003系统中文件在相似位置):

<DesignTimeData>

  <Website RootUrl="C:\" CacheFolder="WCFService1" EnableWcfTestClientForSVC="true"/>

</DesignTimeData>

    注意在修改websites.xml文件之前请先关闭Visual Studio,否则Visual Studio关闭时会重写覆盖websites.xml文件。

 

IIS托管的WCF服务的常见Setup问题

微软服务器与开发工具事业部 黄捷

如果你创建寄宿在IIS中的WCF Service网站项目,(图1显示怎样创建这样的网站项目),或者你把你的WCF Web Application项目或者WCF Service网站项目发布或部署到IIS网站服务器上后,你可以用网页浏览器去访问你的网站。如果你在尝试打开这些网页时无法看到正确的页面显示,或者看到错误提示页面(图2是错误提示页面的一个例子: HTTP Error 500.21 – Internal Server Error Handler “svc-Integrated” has a bad module “ManagedPipelineHandler” in its module list),下面是最常见的问题和解决办法。

                                                          Image

                                                                   图1 image                                                                   图2

常见问题与解决办法:

1. 检查IIS是否正确安装和运行

你需要保证你的IIS服务器已经正确安装并正常运行。这里我们不讨论IIS安装的方法(你可你根据你的Windows版本和需要的IIS版本去bing中搜索), 只给出简单的验证方法。如图2所示,在IE地址栏中输入http://localhost, 如果你看到如图所示的页面或者类似的其他版本IIS的默认页面。那么就说明IIS已经在正常运行了。

image 
                                                                      图3

2. 正确注册安装ASP.net

打开Visual Studio命令行提示工具(Start->All Programs->Visual Studio->Visual Studio Tools->Visual Studio Command Prompt, 如果你的OS是Windows Vista及以后的版本,你需要以管理员身份打开),运行”aspnet_regiis.exe -i”。在命令运行完成后重新尝试你的网站。

3. 在IIS中配置正确的Application Pool

在IIS管理工具(IIS Manager)中找到你的Website, 选中。在右侧的面板中点击Basic Settings。 你将看到如图3所示的弹出窗口,其中有你正在使用的Application Pool的信息。 选择IIS管理工具中的Applications Pools节点。选中你在使用的Application Pool, 点击右侧的Basic Settings。 你将看到如图4所示的弹出窗口。确定其中的.NET Framework版本是v4.0.xxxxx。如果不是,这也许就是你看到错误页面的原因。尝试在图2中把它改成v4.0或者在图3中选择”Select…”, 更改成其他的使用.NET Framework v4.0的Application Pool。

image

                                                  图4   image  
                              图5

 

4. 安装注册WCF组件

WCF没有正确的在IIS中注册也许是导致看到错误页面的最常见原因。如果你在安装Visual Studio后才安装IIS, 那么你就很可能遇到这样的问题。打开Visual Studio命令行提示工具(Start->All Programs->Visual Studio->Visual Studio Tools->Visual Studio Command Prompt, 如果你的OS是Windows Vista及以后的版本,你需要以管理员身份打开),运行” ServiceModelReg.exe –ia”。 命令完成后再次访问你的WCF 网站。

介绍VS2010中WCF 工具的新功能

微软服务器与开发工具事业部 薛敏敏

如果你在VS2008中开发过WCF服务应用,那你应该使用过集成在其中的WCF开发工具。如果你刚刚开始使用WCF技术,那么可以先阅读这两篇博文对这些WCF开发工具有一个初步的了解:VS2008中的WCF开发工具VS2008 SP1中WCF开发工具的新功能和增强点

而在VS2010中我们团队继续为WCF开发工具添加了一系列新功能,希望能为大家提供更好的开发体验。在本文中我将它们逐一罗列出来:

在工作流4.0应用中添加服务引用

当你在一个工作流4.0应用中添加服务引用时,你会看到和以前一样的添加服务引用对话框,可以输入服务的mex或wsdl地址,来生成客户端的代理。不同于以往生成的代码,这时还会生成一组基于XAML的预先配置好的消息活动,和服务中的方法一一对应。当你build你的工作流4.0应用后,这些活动会加到Toolbox中,你可以拖拽使它们成为你的工作流的一部分,并且使用它们来调用服务。

image image image

新的WCF工作流服务模板

在.net4.0中,我们新添加了一个新的WCF工作流服务应用模板,帮助创建可长时间运行的工作流服务。

image  image

简化配置的WCF服务模板

在WCF4.0中对配置作了简化,包括:使<Services>部分变为可选的,在运行时获得服务的终结点信息;支持服务行为和绑定配置、终结点配置的名字为空等等。所以在4.0的服务模板中也在配置文件中体现了这些简化的配置,以下是WCF服务应用模板的例子:

<system.serviceModel>

<behaviors>

<serviceBehaviors>

<behavior>

<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->

<serviceMetadata httpGetEnabled="true"/>

<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->

<serviceDebug includeExceptionDetailInFaults="false"/>

</behavior>

</serviceBehaviors>

</behaviors>

</system.serviceModel>

在WCF和工作流服务应用中F5自动启动WCF测试客户端

在VS2008中,只支持在WCF服务库模板中F5自动启动WCF测试客户端。在VS2010 中,从WCF和工作流服务应用模板创建的WCF服务应用也支持F5自动启动WCF测试客户端。在F5前,请先选中特定服务的.svc或.xamlx文件。

WCF测试客户端支持DataSet类型

WCF测试客户端可以测试WCF服务或者.NET服务中使用的DataSet数据类型。

image

在WCF和工作流服务应用中全新的服务发布机制

当基于WCF或WCF工作流服务应用模板创建服务应用后,你可以使用全新的发布机制来部署这些服务应用。对于WCF服务库应用还是继续沿用老的发布机制。

Web包:在VS2010中使用MSDeploy打包应用,在Web包中包含了IIS设置信息,相关的web内容,SQL服务器数据库,安全认证,GAC组件,等等。所以Web包可以直接拿到任何服务器上发布。

image image

配置文件转换:在VS2010中引入了XML Document Transform (XDT),用于灵活地转换开发时或发布时的配置文件。在配置转换文件web.debug.config, web.release.config中存储在web.config文件中需要被替换的内容。

image image

服务发布一步到位:VS2010支持使用IIS远程管理服务把应用发布到远程服务器上。通过创建好特定的profile,可以支持一键式的发布。

image

以上是对VS2010中WCF工具的简单小结。在后续的文章中,我们将会对其中的一些功能作更详细的描述。

有用的链接:

WCF 和WF新功能:  http://msdn.microsoft.com/en-us/netframework/cc896557.aspx

WCF,WF和AppFabric的网上实验室: http://msdn.microsoft.com/en-us/cc814756.aspx

Posted by WCFToolsBloggers | 0 Comments
Filed under:

MVP Day: WCF REST课程预告和意见征询

我们将于12/10 - 12/11的MVP Day作一个关于WCF REST的讲座。下面是这个讲座的简介和主要方向。希望大家能在会前多给意见,使我们的讲座更有针对性。

主题;使用WCF创建RESTful服务

REST作为一种创建服务架构风格,诞生多年并日趋流行,目前它已经成为一种事实上的标准和许多企业对外发布服务的首选。而微软也在WCF程序框架中开始提供了对REST服务的支持。在这个框架下,我们可以使用WCF技术来方便地创建REST服务。在这个讲座中,我们将介绍REST和WCF的一些基本概念,WCF如何实现REST,以及如何来使用WCF创建一个REST风格的服务。在这个Session中,我们将讨论到:


1.回顾REST的基本概念,它的优势,它的使用情况。

2.通过一个简单的例子引入一个REST风格的程序,同时讨论WCF内部是怎么实现REST框架的

3.演示一个更加具体的例子(微博客服务类似于Twitter)的开发,来一步一步介绍怎么使用WCF开发REST,包括如何处理URI,处理返回的资源格式,设置安全性,在IIS上进行部署等等。

Posted by WCFToolsBloggers | 2 Comments
Filed under:

WCF中的REST架构三 (支持AJAX的WCF Service – 使用服务)

在昨天的文章WCF中的REST架构二(支持AJAX的WCF服务 - 创建服务)中, 我介绍了一个包含一些ASP.NET AJAX 客户端库控件的入门解决方案。这个解决方案还没有具体实现的代码, 等着我们为它编写支持AJAX的WCF服务和客户端代码去调用这些服务. 我随后介绍了如何利用webHttpBinding和enableWebScript 这两个endpoint behavior去实现一个支持AJAX的WCF服务。

在本篇中,我将会编写客户端的代码去调用我们的服务。 你可能还记得我们上一篇中的Catalog.aspx (应用程序中包含AJAX控件的主要页面)有一个空方法GetData。这个方法在页面初始化的时候,以及在用户在不同商品的不同页面间跳转时被调用。这个方法就是我们要编写代码去调用我们的服务的地方。

注册服务

在我过于深入之前,让我们先短暂停留一会儿。之前我已经编写了一个支持AJAX的WCF服务,但是这究竟意味着什么?从本质上来说,这意味着我们的服务有一个endpoint behavior, 它允许我们创建客户端的AJAX代理类,用几行代码就可以调用我们提供的服务。然后,我们仅仅只需用ScriptManager注册我们的服务就可以实现将这个代理类转化成”流”(stream)传给浏览器。请看下面的代码:

<asp:ScriptManager ID="scriptManager" runat="server">

<Scripts>

<asp:ScriptReference Path="Controls/Catalog.js" />

<asp:ScriptReference Path="Controls/HighlightImageBehavior.js" />

<asp:ScriptReference Path="Controls/ShoppingCart.js" />

<asp:ScriptReference Path="Controls/LoginStatus.js" />

</Scripts>

<Services>

<asp:ServiceReference Path="~/CatalogService.svc" />

</Services>

</asp:ScriptManager>

如果你对ScriptManager不熟悉,他是一个ASP.NET控件,责任是按需分发页面必需的javacript. 如果你有ASP.NET AJAX服务器控件的经验,你会知道它们就是通过ScriptManager来交流他们的脚本需求的。ScriptManager然后给出相应的脚本元素, 在上面的代码中,这个Script节点包含了4个指向专用于这个购物示例应用程序的ASP.NET AJAX客户端库的引用。他们与我们当前的议题(调用WCF服务)并不相关。重要的部分是Service节点。你会注意到这个节点包含了一个指向CatalogService.svc文件路径(即服务的路径)的 ServiceReference。 我们这里主要做的就是把这个支持AJAX的WCF服务注册到ScriptManager中来。

通过注册,我们告诉ScriptManager为网页分发一个指向一个HttpHandler的script元素,它知道如何生成服务的客户端代理。为了展示这一点,我将直接在浏览器中打开这个网页,然后在页面上点击右键,选择”查看源码”。往下翻动,下面那是我找到的内容:

image_2

代理类

如果你想看一下客户端代理的代码(你应该看一下),在你的网页URL后面加上CatalogService.svc/jsdebug。在我的例子中,完整的URL是: http://localhost:50183/ClientStore/CatalogService.svc/jsdebug。打开后你会得到如下的对话框:

image_thumb_1

我将代理保存到我桌面的本地文件,更名为proxy.js。然后我将这个文件拖放到我的好友Visual Studio中去。以下是我看到的部分:

image_thumb_2

第一个值得注意的地方是这里的代理利用了ASP.NET 客户端库。在这些库中,我们”.NET化”了JavaScript。 我们添加了命名空间(namespace),类等一系列概念。如果你对更详细的ASP.NET AJAX客户端库感兴趣的话,可以参看我写的12 part webcast series。里面介绍了几乎ASP.NET 客户端类实现的所有方面。

第二个值得我们注意的地方是,AJAX类的命名空间和我们在第二篇里面创建的服务的命名空间是一致的。最后一件我想讨论的是,GetPatients操作(operation)被加到了AJAX类的原型(prototype)当中(在JavaScript当中,每一个对象都有一个对象原型。这个原型就是用来存放那些非实例特有的成员,例如方法,的正确地方)。你会注意到这里的操作的签名(signature)基本上是和我们服务操作的签名是一致的。不同的地方是这里多了调用成功或失败的回调函数,以及context参数。这些参数是必要的,因为回调函数是在异步模式下被调用的。换一种说法, 我们的服务操作被”AJAX化”了。现在调用我们的服务就变得很简单了:1) 创建一个代理类的实例。 2) 调用代理的GetPatients 方法。事实上,我们还有第三步和第四步要做的事情,我们还需要编写我们的回调方法。让我来通过扩充GetData的代码来给大家演示。

完成调用

在你刚开始创建你的代理实例的时候就会注意到的是,VS2008为代理类提供了IntelliSense支持。见下图:

image_thumb_3

下面是GetData的完整代码:

// This function calls the GetProductGrouping AJAX method,

// using the script proxy

function GetData()

{

var startIndex = ((currentPage) * pageSize);

var proxy = new shopping.services.CatalogService();

proxy.GetProductGrouping(startIndex, pageSize, ProductsReturnedEventHandler, ProductsFailedEventHandler, null);

}

我们曾经需要为实现正确的行为写上几十上百行代码,而不是这里的两行。当提到这点的时候,我是在特别针对那些已经不必再由我们自己去实现的那些串行化(serialize)和反串行化(deserialize)代码。如果你真的要自己去实现所有的代码的话,你必须写代码把你的客户端参数(以及方法信息,如果你用POST的话)串行化成例如JSON或者XML那样的格式。然后你需要在服务器端去写代码反串行化你的那些参数,调用服务,得到.NET类型的服务响应。接着你还需要将这些.NET类型再串行化回JSON或者XML格式(或者其他你选择的格式)并将他们以异步的方式传回客户端。最后,你还需要在客户端将这些数据流反串行化给JavaScript。 现在,.NET已经帮你打理好了这所有的一切。

在第二篇中,我讨论了ProductsReturnedEventHandler是如何简单的得到一个AJAX控件,设置两个属性的值(他们其中之一的值被设为服务调用响应的返回值),以及调用一个方法去做DOM插入。让我们在Visual Studio调试功能和WebDevHelper的帮助下来看一下往返发送的数据内容。第一个我想让大家看的是在做完所有串行化/反串行化以后传递给回调方法的参数。请注意传递给回调方法的JavaScript类型是我们在第二篇中详细讲述的.NET类型的近似表示。 就连.NET的类型名也通过”__type”被传递了。看下图:

image_10

下一个我要展示给大家的是真正的请求和响应(这里借助Nikhil的WebDevHelper工具):

image_thumb_6

我们也可以看到请求和响应的内容:

image_thumb_7

控制如何曝露(Expose)服务

你在上面注意到,服务默认是以POST的方式曝露的。甚至大多数自由REST主义者(liberal RESTafarians)看到这个都会皱眉头。GET才是大多数人对于获取操作的实际选择。还有,你会注意到默认的数据表达格式(数据串行化方式)是JSON。但万一如果你并不想用JSON,而想用XML的某种形式那该怎么做呢?结论是,通过使用enableWebScript endpoint behavior你可以控制两样东西。通过webHttp endpoint behavior, 可以控制更多的东西。你将在以后的文章中读到这些内容。

为了控制操作的Http 动词(Verb), 你可以用下面的一个或两个属性来修饰你的操作:

  • [WebGet] – 将Http 动词设成GET
  • [WebInvoke(Method=”…”)] – 将Http 动词设成GET以外的任意动词。不过,当使用了enableWebScript的时候,只有POST是被支持的。其他的动词只被webHttp endpoint behavior支持。

WebGet和WebInvoke都有一个ResponseFormat参数。你可以将它设成WebMessageFormat.Xml 或者WebMessageFormat.Json。你可以从下面的代码看到我如何设置这些选择。

[OperationContract]

[WebGet(ResponseFormat=WebMessageFormat.Xml)]

public ProductGroupingData GetProductGrouping(int startIndex, int pageSize)

为了演示这些设置的结果,我打开另一个的页面调用这个服务。下面是WebDevHelper里面的结果:

image_thumb_8

支持AJAX的REST服务的总结

在这两篇文章中, 我实现了一个支持AJAX的WCF服务和一个使用这个服务的AJAX客户端。那么,这个服务是否落脚在了REST领域中了呢?如果是的话,在哪里?我相信它满足了RESTFUL的标准。首先,它没有用到SOAP包,这无疑迈出了第一步。当我们比照不同的RESTfulness的不同标准的时候,我们发现我们的实现很明显落在了 LO REST这一边。考虑下面几点:

  • 我们只用了两个Http 动词,GET 和POST。我们把PUT和DELETE都忽略了。在一个HI REST场景中,人们可以说,通过Http动词就足以理解调用的目的(GET用来获取,PUT用来插入或更新,DELETE用来删除,POST用来添加 – 或者一些类似的任务)。在我们的例子中,我们反复使用了POST。我们必须通过检查请求的内容才能够理解调用的目的。结论 -> LO
  • 在URI可定位性(addressability)这方面,我们在GET中使用查询字符串。更进一步,我们的实现感觉上有点RPC的意味。结论-> LO
  • 在表达格式这方面,我们可以选择任意二者之一。虽然JSON是标准,但他并不影响数据的含义,而只是一种语法罢了。并且,你当然也可以返回一种标准,在你的服务中接收XML的表示。结论-> 无法确定

请不要把我上面这段蠢话误解为在给这个服务打分。我不是这个意思,我喜欢这里的支持AJAX的实现。我只是想给你们一点东西去回味咀嚼它在REST领域中的定位。

在后面的文章中,我将会给大家展示一种更靠近于HI REST 一端的实现。

WCF中的REST架构二 (支持AJAX的WCF服务 - 创建服务)

我在昨天 的文章WCF中的 REST架构一(REST 概述)谈了REST的基本概要,并提出了从HI REST (高REST)到 LO REST (低REST) 的RESTFULness(REST度)的概念。在今天的文章中,我将详细介绍大家可能最为熟悉的REST风格的 WCF 服务:支持AJAX的服务。此类服务应属于LO REST的范畴。现在很多人直觉地将“好”等同于“高大全”,因而低估了这种LO REST实现的价值。本篇将告诉你这决非事实,支持AJAX的WCF服务是足够强大的。
解决方案的背景信息
我有一个底层工作已基本完整的初始解决方案,大部分代码是作为12集AJAX 客户库Webcast 系列的组成部分。提供这个初始解决方案的目的是为了让我更好地展现支持AJAX的WCF服务的强大能力,避免现场创建一个这样的服务然后再与AJAX 客户应用集成所需的冗长步骤(如何你认为我创建的范例应用乏善可陈,请试一下Supersefer,这是一个基于这个范例的希伯来文网上商店)。在这个初始解决方案中请特别注意两个ASP.Net AJAX 控件: Catalog.js和ShoppingCart.js. 下面的截图就是这两个控件的显示
image
Catalog控件是本篇的重要操作对象,它的任务是接受一个特定的数据结构,显示一页产品信息,作绑定用途,并在用户选中某样产品或者点击浏览控件的时候出发消息,至于该控件是如何与宿主页(Catalog.aspx)交互,大家可以在前面提到的Webcast系列中找到。就本篇而言,我们只要关注Catalog.aspx(宿主页)中的下列代码片段,里面有一个GetData() 方法。等我们实现了WCF服务之后,就在这个方法里调用它。我们会给WCF服务传入诸如startIndex(起始索引)和pageSize(页的大小)之类的参数(服务的返回数据将是指定页数的产品信息), 以及几个回调方法(服务调用成功或失败后被回调)。下面也给出了调用成功的回调方法。该方法直接获取了指向catalog控件的引用($get 在 asp.net的AJAX中用来指向一个控件)。然后它将设定当前页的索引值,再用传入回调函数的数据,也就是我们的WCF有效荷载,来设定productInfo属性。最后,该函数调用控件的dataBind方法,这个方法直接基于存储在productInfo属性中的数据做了一些DOM注入。
image

添加服务
添加一个支持AJAX的 WCF 服务相当简单。第一步就是使用'AJAX-enabled WCF Service'模板添加服务。过程如下:在Solution Explorer里面选择”Add New Item’ > 选择'AJAX-enabled WCF Service' > 将其命名为 CatalogService.cs > 点击 ‘Add’.
image
模板看起来相当神奇,其实它不过是添加了一些特定的文件,并更改了另一些文件(通常是*.config文件)而已。如果你是按照我的步骤,那么这个模板做了下列事情:
1. 在项目根目录下添加CatalogService.svc文件
2. 在app_code目录下添加CatalogService.cs文件
3. 在web.config内配置服务
分析一下生成的文件
我们来看一下上面模板生成的文件并稍加讨论:
CatalogService.svc
<%@ ServiceHost Language="C#"
Debug="true"
Service="CatalogService"
CodeBehind="~/App_Code/CatalogService.cs" %>
*.svc文件可以类比于*.asmx文件。如果该服务在IIS或者WAS上运行,这个文件就作为服务的可定位资源。换句话说,*.svc 就是你服务的的基址。这个文件里我们只需注意两个属性:首先是Service属性,该属性被设为实现该服务的CLR类型名(你可以在app_code目录下的CatalogService.cs中找到该类型)。第二个就是指向实现文件的CodeBehind属性。
你无需修改svc 文件的内容,我只是为了向你展示该文件就是作为服务的base地址。
web.config
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="CatalogServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services>
<service name="CatalogService">
<endpoint address=""
behaviorConfiguration="CatalogServiceAspNetAjaxBehavior"
binding="webHttpBinding"
contract="CatalogService" />
</service>
</services>
</system.serviceModel>
如果熟悉WCF,你一定知道WCF的配置是位于system.serviceModel节点下。你会看到3个子节点:behaviors, serviceHostingEnvironment和serivces:
1. Services: 文件内已经有一个名为CatalogService的服务,与实现服务的类名一致。在Service节点下,你可以看到Endpoint,它包含了服务的ABCs:Address(地址), binding (绑定)和contract (协定).
    a. Address: 你会发现地址是空的 ,不必担心,因为svc文件会作为基
    b. Binding: webHttpBinding是WCF3.5提供的可以让服务以REST方式发布的新型绑定。这个绑定有两种模式,你可以通过特定的终结点行为来指定模式(通过设定behaviorConfiguration)
    c. Contract: contract指定了WCF服务提供的功能。该属性被设为一个已经定义好的服务协定。要定义一个服务协定,你可以用ServiceContract修饰一个接口或者类。被ServiceContract修饰的接口或者类中,所有由OperationContract修饰的方法将被作为服务的操作暴露给客户。一般来说用接口做服务协定是更好的做法,这样做的好处是分离了协定与具体实现。 但在我们使用的模板中却使用了类的方法,也就是说,接口是从类自动推断出来的(接口推断)。
    d. BehaviorConfiguration: 对于webHttpBinding, 你需要将该属性设为一个拥有webHttp或enableWebScript子节点的终结点行为。
2. Behaviors: 将behaviors加入到服务或者服务终结点的目的在于改变runtime的默认行为或者加入定制的扩展。你会发现我们使用的模板已经声明了一个名为CatalogServiceAspNetAjaxBehavior的终结点行为. 该行为有一个enableWebScript 元素。enableWebScript是两种可能的终结点行为之一,另一种就是webHttp。事实上enableWebScript是webHttp用来提供AJAX 功能(比如生成客户端代理)的子类
3. ServiceHostingEnvironment: 跟ASP.Net运行的WCF服务的默认配置是让两者互不干扰 例如,ASP.NET runtime 不参与WCF请求的处理. WCF服务也不能使用ASP.NET context 和 session 这样的功能. 而我们这里的配置是将aspNetCompatibilityEnabled 设为true, 在这种设置下WCF请求就会加到ASP.Net 的请求流水线里了。
*要使WCF支持REST,只要在该配置文件中注意最重要的两点:1)binding应设为webHttpBinding 2) endpoint behavior要设定为webHttp或enableWebScript

CatalogService.cs
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode =
AspNetCompatibilityRequirementsMode.Allowed)]
public class CatalogService
{
// Add [WebGet] attribute to use HTTP GET
[OperationContract]
public void DoWork()
{
// Add your operation implementation here
return;
}
// Add more operations here and mark them with [OperationContract]
}
在这里我们就真得做点儿事儿了。如果已经读了上面的内容,你应该已经注意到我们已经用接口推断的方法定义了的服务协定,就是说用ServiceContract属性修饰了一个类而不是一个接口。
无论如何,我们要开始做一点儿实现了。第一件事儿是设定ServiceContract属性的NameSpace参数。这一点非常重要。客户端用于调用WCF服务的代理的名字空间就是从这里拿的。我就将名字空间设为urn:shopping/services.[ServiceContract(Namespace = "urn:shopping/services")]
接下来,我要添加一个操作(就是一个用OperationContract修饰的方法)。这个操作使用LINQ to SQL到数据库获取一页产品信息。该实现返回一个包含ProductData类型的ProductGroupingData 类型。我这样做的原因在于我不仅需要返回产品信息(ProductData),还需要一些有助于分页的元数据(StartIndex, PageSizebut 和ProductGrouping的TotalCount)。 下面就是这些类型:
[DataContract]
public class ProductData
{
[DataMember]
public int ProductId;
[DataMember]
public string ProductName;
[DataMember]
public string Description;
[DataMember]
public decimal Price;
[DataMember]
public string ProductImage;
}
[DataContract]
public class ProductGroupingData
{
[DataMember]
public List<ProductData> Products;
[DataMember]
public int StartIndex;
[DataMember]
public int PageSize;
[DataMember]
public int TotalCount = 0;
}
以下是实现代码:
[OperationContract]
public ProductGroupingData GetProductGrouping(int startIndex, int pageSize)
{
using (CatalogDataContext catalogCtx = new CatalogDataContext())
{
// Set up the query
var products = from p in catalogCtx.Products
orderby p.ProductName
select new ProductData()
{
ProductId = p.ProductId,
ProductName = p.ProductName,
Description = p.ProductDescription,
Price = p.Price,
ProductImage = p.ProductImage
};
// Use skip and take extension methods for server side paging 
// and call ToList to execute the query
var productColl = products.Skip(startIndex).Take(pageSize).ToList();
// Add the metadata 
var package = new ProductGroupingData()
{
Products = productColl,
StartIndex = startIndex,
PageSize = pageSize,
TotalCount = catalogCtx.Products.Count()
};
return package;

}
到这里,我们已经创建好了一个支持AJAX的服务。一个服务支持AJAX,就是说该服务可以非常容易地被一个 AJAX 客户端调用。接下来的 WCF中的REST架构 三,我就讨论如何在客户端调用服务.

Posted by WCFToolsBloggers | 4 Comments
Filed under:

WCF中的REST架构一(REST 概述)

注:从今天开始,我们将陆续翻译Rob Bagby的精彩文章"REST in WCF" 系列,原文链接如下:http://blogs.msdn.com/bags/archive/2008/05/28/rest-in-wcf-part-i-rest-overview.aspx

WCF中的 REST架构一(REST 概述)

不同的人似乎对REST有不同的定义,有些定义是非常严格的,而有些则是比较自由的。我倾向于认为REST架构存在于一个连续的范围里, 如图所示:

image

我们可以认为REST背后隐含的基本理念如下:

· 越简单越好

· Web一直是非常成功的。

· Web是很简单的。

· Web设计要遵循一些指导性原则,而这些原则在过去很长一段时间内都是可靠的。

· Web 服务的设计要以 Web的方式。

尽管不同的人对 REST有不同的定义,但可以肯定的是存在一些特征来影响一个服务是否是RESTful的,或者它能不能被认为是RESTful, 或者它能否落在上面这个连续范围内的某个位置。这里列出一些(并不是全部)特征:

· 对HTTP 方法(GET,PUT,POST,DELETE是主要的HTTP方法)的合理使用——HI-REST端倾向于对具体方法用于具体的情景进行严格的规定。例如一个HI-REST的实现中使用GET方法获取,DELETE方法用来删除,PUT方法用来插入或者更新,而POST方法则用来附加。而LO-REST的解决方案则可能使用POST方法做插入,更新,删除和附加操作。

· 对数据表现形式的选择——HI-REST解决方案倾向于选择标准的数据表现形式,而一些LO-REST解决方案则认为POX也是一个不错的选择。

· 对良好构造的URI的使用——HI-REST解决方案倾向于使用描述性的URI而一般情况下不使用查询字符串,而我们在一些LO-REST解决方案中可以看到对查询字符串的使用。

· 其他:有效负荷中包含指向相关信息的链接,使用合适的HTTP 响应代码。

我没有在什么是REST的基础上给出一个严格的定义,原因并不是我觉得这不重要。原因是,从WCF的角度,一个专门的定义无关紧要。WCF支持范围两端的REST架构(HI-REST和LO-REST)。事实上,在下一篇文章中,我将建立一个LO-REST的实现,同时在之后的文章中,我将演示HI-REST端的实现。

如果上面这些对你来说都没有什么意义,也没有关系,下面的文章将提供具体的实例。

Posted by WCFToolsBloggers | 1 Comments
Filed under:

在VS2008 SP1中WCF Tools 相关的Readme文件

你可以在以下的网页找到VS2008 SP1的readme文件:

http://download.microsoft.com/download/6/F/E/6FECE629-D1AB-4B47-BEFC-6772F375A6B5/VS2008SP1Readme.htm

这里我摘抄了和WCF开发工具相关的两项。

2.3.7 Windows Communication Foundation (WCF) 工具

2.3.7.1 当在属性页上将相对路径设置为输出路径时,WCF 服务主机无法承载 WCF 服务库项目

创建 WCF 服务库项目时,可以在项目“属性”页的“生成”选项卡上将输出路径从默认的 bin\debug\ 更改为相对路径,例如“.”或“..”。然后,在尝试调试服务时,WCF 服务主机无法承载该服务,并且将显示此消息:“无法直接启动带有“类库输出类型”的项目。”

解决此问题的方法:

在“生成”选项卡上,输入完全限定路径而不是相对路径。

2.3.7.2 在具有 TFS 插件的 Visual Studio 中,当在 WCF 服务库项目中选择添加新项时出现错误消息

如果在具有 TFS 插件的 Visual Studio 中创建新的 WCF 服务库项目,则在此项目中选择“添加新项”时可能会看到显示一个错误。单击“确定”关闭该错误对话框后,该项服务将成功添加并按预期方式工作。

解决此问题的方法:

单击“确定”以关闭错误对话框。

Posted by WCFToolsBloggers | 1 Comments
Filed under:

VS2008 SP1正式发布: WCF工具的相关功能和贴图

VS 2008 SP1已经正式release!

在本篇文章中,我将会用贴图的形式向大家介绍在VS2008 SP1中由我们团队开发的新功能。

WCF测试客户端(WCF Test Client)的增强:

- 支持 XML Serializer, Message Contract, DictionaryNullable<T> 类型

clip_image001

- 支持WCF Session

clip_image002

- 支持standalone模式,可以连接测试第三方的服务

clip_image003

- 支持客户端配置文件的修改和保存

clip_image004

WCF Service Publishing, 可以支持从WCF Service Library项目直接发布WCF服务到本地 IIS, 文件系统, FTP站点或远程站点

clip_image005

clip_image006 clip_image007

此外,我们也基于用户的反馈对现有的功能作了一些增强。

例如,当调试在同一个解决方案的其他项目时,我们可以让你选择是否要为当前的WCF服务项目自动启动WCF服务主机

clip_image008

想使用这些工具开发你的WCF服务吗?你可以在这里下载VS2008 SP1.

Posted by WCFToolsBloggers | 1 Comments
Filed under:

在VS2008 SP1中WCF Tool的一些使用技巧

在这篇文章中,我将向大家分享一下在VS2008 SP1中WCF工具的一些使用技巧,希望能帮助大家更好的使用它们。

WCF Test Client: 如何更改存放客户端配置临时文件和assembly临时文件的文件夹

在VS2008 SP1之前,WCF Test Client将客户端配置临时文件和assembly临时文件存放在“My Document”文件夹。当这个文件夹被设置到网络上的另一台电脑上,WCF Test Client可能会无法调用服务。错误信息如下:“An error occurred creating the configuration section handler for system.serviceModel/bindings: That assembly does not allow partially trusted callers…”。

clip_image002

clip_image004

在VS2008 SP1中,我们做了如下改进:

首先,我们将默认文件夹从“My Document”改成%temp%。%temp%文件夹被设置到网络上的可能性相对“My Document”要小很多。

其次,我们也提供了可以改变默认文件夹的命令行工具。你可以把文件夹从%temp%改成任意指定的文件夹,而且也可以恢复成%temp%。关于这些命令的具体格式请参考下面的贴图。

clip_image006

svcutil的版本较老时,WCF Test Client无法添加服务

有时候,当svcutil.exe没有被正确安装或者安装的版本较老时(在Windows SDK v6.1文件夹中),WCF Test Client无法添加服务。错误信息如下:“Error: Unrecognized option ‘targetclientversion’ specified.”。

clip_image008

请先确认下列的版本信息:

- 在Windows SDK v6.0A文件夹中的SvcUtil.exe的版本号是3.0.4506.648或更高

- 在Windows SDK v6.1文件夹中的SvcUtil.exe的版本号是3.0.4506.648或更高

- WcfTestClient.exe 的版本号是9.0.588.0或更高

如果svcutil.exe的版本号是老的或者没有被正确安装,解决的方法是:

- 安装最新的Windows SDK

- 或者从Windows SDK v6.0A 文件夹复制svcutil.exe 到Windows SDK v6.1文件夹中

安装Biztalk Services SDK将在WCF Test Client中引入一个无法识别的endpoint

如果你安装了VS2008 SP1后再安装Biztalk Services SDK,Biztalk Services SDK会在machine.config文件的<system.serviceModel>中的<client>部分引入一个endpoint。

然后,每次在WCF Test Client中添加一个服务时,会生成一个无法识别的endpoint(服务合同是IMetadataExchange),而WCF Test Client如下图所示报错:“The contract ‘IMetadataExchange’ in clinet configuration does not match the name in service contract…”。

clip_image010

当你按下“OK”按钮,这个多余的“IMetadataExange (sb)”部分就会出现在服务节点内。如下图所示:

clip_image012

这并不会影响WCF Test Client的功能。当你需要用WCF Test Client测试不同的服务,你可以采用下面的方法来避免频繁的报错信息:

当你需要运行WCF Test Client测试服务时,注释掉下面所列的machine.config文件中的配置信息(文件路径:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG)。当你需要使用Biztalk Services SDK时,再恢复这些配置。

<client>

<endpoint address="" binding="relayBinding" bindingConfiguration="metadataExchangeRelayBinding"

contract="IMetadataExchange" name="sb" />

</client>

<bindings>

<relayBinding>

<binding name="metadataExchangeRelayBinding" />

</relayBinding>

</bindings>

某些时候VS2008 SP1的安装不当会导致Service Configuration Editor不能在Visual Studio中启动

A customer reported an issue, and I would like to share with you here.

我想在这里和大家分享一个客户报告的问题。

这个用户原来在他的电脑上安装过VS2008 SP1 Beta版、 .net3.5 SP1 Beta版 和Windows SDK v6.1。然后他安装了VS2008 SP1和.net3.5 SP1的正式版。他的安装过程可能有一些不恰当的步骤。

然后,他在Visual Studio 中用我们团队开发的WCF Service Library模板创建了一个WCF服务项目,他试着用右键菜单启动Service Configuration Editor(SvcConfigEdior.exe)编辑app.config文件,这时Visual Studio中弹出一个报错对话框:”Can not find C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\svcconfigeditor.exe”,如下图所示:

clip_image014

这里有两个问题:

- 在Windows SDK v6.0A文件夹中的 SvcConfigEditor.exe不见了

- 在安装了Windows SDK v6.1后,Windows SDK v6.0A 仍然被设置成缺省的 SDK,这导致Visual Studio还是试着从Window SDK v6.0A 下寻找SvcConfigEditor.exe

要解决以上问题,我建议使用“Windows SDK Configuration Tool”重新设置缺省的 SDK。

要避免以上问题,请在安装正式版本前确认已经卸载了所有的程序包括更新。

clip_image016

Posted by WCFToolsBloggers | 0 Comments
Filed under:

介绍在VS2008 SP1中WCF工具的新功能和增强点

你是否在VS2008中使用过WCF开发者工具和IT管理员工具?这些由我们团队开发的工具包括:

- WCF开发者工具:WCF服务模板,WCF服务主机和WCF测试客户端

- 对基于WCF服务模板开发的项目,支持添加服务引用(Add Service Reference)和Auto Attach

- WCF IT管理员工具:服务配置编辑器和服务跟踪查看器

现在VS2008 SP1 Beta发布了!关于WCF工具,你是否有兴趣知道这个版本能带给你哪些更好的体验?我在此将与你分享我们团队在SP1 Beta中开发的新功能和对现有工具的增强点。

WCF开发者工具

在SP1中,我们着重对WCF测试客户端这个工具添加了一些新的功能。无论你是WCF技术的初学者还是一个有经验的WCF开发人员,WCF测试客户端都可以给你提供更好的测试WCF服务的体验。

- 支持XML Serializer, Message Contract, DictionaryNullable<T> 类型。现在WCF测试客户端可以测试WCF服务或者.net服务中使用的大部分数据类型。

- 支持WCF Session

- 支持standalone模式。在VS2008中,只有在VS中F5调试基于WCF服务模板开发的项目时才会启动WCF测试客户端。现在在VS2008 SP1中,WCF测试客户端可以独立启动,你可以打开一个WCF测试客户端,然后在它里面添加删除,或刷新你需要测试的服务。

- 支持客户端配置文件的更改和保存。当在WCF测试客户端里添加一个服务,这个服务在客户端对应的配置文件会自动生成。在VS2008中,这个配置文件是只读的。而在VS2008 SP1中,你不仅可以编辑客户端配置文件,而且还可以保存下来,每次在WCF测试客户端添加这个服务进行测试时都可以使用保存下来的配置文件。

我们团队在VS2008 SP1中还开发并集成了一个全新的功能:支持从WCF服务模板项目中直接把服务发布本地IIS文件系统FTP站点或者远程站点。之前,你只能在基于web的WCF服务项目中作上述操作。当使用这个功能发布好服务以后,你又可以用WCF测试客户端来测试服务是否工作正常。

除此以外,还有一些改进的地方值得一提,因为这些改进都是基于我们收到的客户反馈:

- 在添加服务引用中,如果WCF服务项目和客户端项目在同一个解决方案中,我们会在添加引用前先自动build这个服务项目。

- 当调试在同一个解决方案的其他项目时,我们可以让你选择是否要为当前的WCF服务项目自动启动WCF服务主机。你可以在WcfServiceLibrary项目的properties page的WCF Options tab页找到这个功能。

以下是对我们WCF开发者工具的图例总结:

Scenario

WCF IT管理员工具(Windows SDK的一部分)

在SP1中服务配置编辑器没有什么变化。我们对服务跟踪查看器做了一些改进,其中最值得一提的是现在你可以双击trace文件(*.svclog or *.stvproj)来打开服务跟踪查看器。

综上所述,所有的这些改进都是为了能够简化用户构建WCF服务的体验。我们的目标是尽可能的让所有人都可以使用SOA并且从中受益。欢迎你使用这些工具并且给我们反馈。

有用的资源:

关于 Visual Studio 2008 SP1 Beta:.

http://msdn.microsoft.com/en-us/vstudio/products/cc533447.aspx

关于我们在VS2008中支持的所有工具,可以参考我们团队的另一篇博客文章:

http://blog.csdn.net/WCFToolsBloggers/archive/2008/02/21/2112093.aspx

Posted by WCFToolsBloggers | 0 Comments
Filed under:

WCF客户端开发的简化之旅 (二) -- Auto-attaching

在上一篇文章中,我们介绍了如何添加服务引用来简化客户端的开发工作。而本文中介绍的Auto-attaching则可以简化客户-服务的调试工作。Auto-attaching,顾名思义,指的是如果针对客户端程序按下“F5”,当这个客户端程序访问同一个VS解决方案内的服务时,调试器(Debugger)会自动附加 (Attach) 到这个服务的宿主进程(对WCF Service Library 项目来说,宿主程序即为WcfSvcHost),从而开发人员可以针对客户-服务进行一体化调试,就像它们是一个程序一样。我们还是沿用上一个例子,来看看它怎么工作。

1.现在已经添加好服务引用,并写好了访问服务的代码,假设我们现在想要调试这个客户-服务解决方案。首先将ConsoleApplication1设为“启动(Start-up)”项目,启动项目在VS里以黑体字表示。

2.在ConsoleApplication1 和 WcfServiceLibrary1分别设置断点,如图:

客户端代码:

image

服务端代码:

image

3.在VS中按下“F5”,我们可以看到WcfSvcHost会自动启动。而调试器首先会附加到ConsoleApplication1进程。几秒钟后,程序执行停在客户端断点处,此时调试器还不会附加到WcfSvcHost进程(出于效率考虑,只有在真正访问一个服务的时候,调试器才会去附加到这个服务的宿主程序)。

4.继续按下“F5”, client.GetData(0)这个调用会向服务发送请求,而调试器会侦听到这一请求,于是它自动附加到请求对应的服务的宿主程序上(也就是WcfSvcHost),很快程序执行停留在第二个断点。

这就是Auto-attaching的工作过程,用户不需要做任何设置就可以同时调试客户端和服务端程序。

使用技巧:

1. Auto-attaching 功能在服务端程序的App.config里进行配置。打开App.config,我们可以看到

<system.web>

<compilation debug="true" />

</system.web>

去掉这一部分,Auto-attaching功能就不会再生效。

2. 在某些应用场景下,大家可能觉得Auto-Attaching 太“智能”了。比如,如果我们所编写的ConsoleApplication1不是服务的客户端,而是WcfServiceLibrary1的host程序,“F5”也会让WcfSvcHost自动启动来 host服务,显然,这会引起冲突,因为在同一个地址/端口只允许一个服务,这个时候ConsoleApplication1因为端口冲突是不能成功host WcfServiceLibrary1的。最合理也是最简单的解决方法是将WcfServiceLibrary1的App.config改名或者删除(这是合理的,因为如果用另一个Project来作为服务的Host Project, WcfServiceLibrary1的App.config是没有什么用处的)。这样,WcfSvcHost就不会很主动地自动运行了。

3. 有的用户可能会遇到Auto-attaching 功能一开始就不能正常工作的情况,这很可能是因为Visual Studio 2008没有完整地安装好。可以在VS 2008 所带的命令行终端里运行vsdiag_regwcf.exe -i来恢复这个功能。vsdiag_regwcf.exe 位于%VSInstallDir%\Common7\IDE。

Posted by WCFToolsBloggers | 1 Comments
Filed under:

WCF客户端开发的简化之旅 (一) -- 添加服务引用

前一篇博文“介绍VS2008中的WCF工具 ”,已经提到添加服务引用(Add service reference…)和Auto-attaching。现在我们就具体介绍如何使用这两个功能来简化客户端的开发与调试工作以及使用中的一些技巧。

这一篇我们先向大家介绍添加服务引用(Add service reference…)。

熟悉Web Service开发的程序员对添加服务引用应该并不陌生。在创建某个服务的客户端程序时,并不需要从头开始编写客户端的底层通信和交互代码,可以通过输入服务地址来添加服务来让Visual Studio生成客户端代理,这样访问服务就像访问本地组件一样,而不需要去关心通信的细节。如果创建的客户端程序项目和服务程序项目处在同一个解决方案里(很多开发者在开发服务时,也会同步开发客户端程序),还可以通过Visual Studio来帮助我们“发现(Discovery)”服务,并添加服务引用。

现在开发WCF Service的程序员也可以得益于这些功能了。如果从WCF Service Library (或者WCF 节点下的Sequential Workflow Service Library 和 State Machine Workflow) 项目模板创建一个项目,那么这些功能就已经具备。

下面我们来看一下如何使用:

1.创建一个客户端程序,可以是一个Windows Console程序。

2. 在同一解决方案里添加一个WCF Service Library。如图:

image

3.Build WcfServiceLibrary1。

4.右键ConsoleApplication1,在上下文菜单中选择“添加服务引用“(Add Service Reference).

5.此时可以看到一个对话框:

image

6.如果已经知道服务的地址,可以直接在Address栏输入地址来添加服务,单击“Go”。可以找到这个地址对应的服务。

7.如果想添加同一个解决方案里的服务,可以先单击“发现”来寻找服务。找到服务后,选中需要在客户端程序生成引用的服务,然后单击确定,这个时候WcfSvcHost就会自动启动来HOST服务。几秒以后,可以看到客户端自动生成了服务代理代码:

image

通过上面的步骤在客户端完成了添加服务引用,现在可以访问服务了,只需要通过下面两行代码就可以调用服务端的一个方法:

ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();

client.GetData(0);

 

使用技巧及注意点:

1.       vs2008的WCF节点下有四个项目模板,但是Syndication Service Library项目并不具备这个功能,这是因为这个服务并没有提供Metadata。
2.       在“发现”服务前,必须先Build服务端项目(也就是上文第3步必不可少)以保证添加的服务引用是最新的。在将来版本的Visual Studio 中我们会做进一步的简化。

下一篇将介绍如何借助Auto-Attaching来简化程序调试。

Posted by WCFToolsBloggers | 1 Comments
Filed under:

介绍VS2008中的WCF工具

WCF开发工具

大家都听说WCF 是很酷的.net技术,可是如何迈出激动人心的WCF服务开发的第一步呢?大家也都知道,开发一个服务,并不只是完成服务本身的功能,还要写主机程序来运行服务,写客户端程序来测试服务,如果能够只专注于开发服务本身,是不是更棒?

我们团队在Visual Studio 2008中开发了一系列的工具,帮助用户提升WCF服务的开发体验,同时也使得初学者的入门更为容易。想象一下,创建一个简单的WCF服务,创建一个主机运行它,并且创建了一个测试客户端来调试它,这些都可以在一分钟内完成!以下是对这一全新体验的简单描述:

1.启动Visual Studio 2008

2.用Visual Basic或者Visual C#创建一个新的WCF Service Library

3.F5!

4.WCF服务主机WCF测试客户端自动完成服务的运行和承载

5.选择服务节点,开始调用服务进行调试

下面是对这些工具的进一步介绍:

1

WCF服务主机

在WCF服务项目中包含一个或多个服务,这个工具为每个有效的WCF服务创建主机,从而运行这些服务。

WCF服务主机支持的服务类型包括由WCF Service Library, Sequential Workflow Service Library, State Machine Workflow Service Library and Syndication Service Library等VS2008服务模板创建的服务。

当服务在这个工具中运行时,可以查看它们的详细信息。

2

WCF测试客户端

顾名思义,这个工具就是一个用来测试服务的客户端。它可以显示待调试服务合同和配置信息,并且可以随着服务端的更新也在每次启动时自动更新。WCF测试客户端集成在Visual Studio 2008中,当用户通过F5调试由WCF服务模板创建的服务时,WCF服务主机和WCF服务客户端都会自动被调用运行。

WCF测试客户端支持的服务类型包括服务主机支持的服务类型包括由WCF Service Library, Sequential Workflow Service Library和State Machine Workflow Service Library等VS2008服务模板创建的服务。

3

WCF服务模板

这些模板可以帮助用户对WCF和.Net3.5的相关技术快速入门。所有这些模板都可以支持两种语言:VB和C#。

技术领域

项目模板

子项目模板

一般WCF 技术

WCF Service Library

WCF Service

WCF Service Application (Web Application)

WCF Service  (Web Application)

WCF Service (Website)

WCF Service (Website)

.Net framework 3.5 Workflow 服务技术

Sequential Workflow Service Library

WF Sequential Service /

XAML WF Sequential Service

State Machine Workflow Service Library

WF State Machine Service / XAML WF State Machine Service

.Net framework 3.5 Syndication 服务技术

Syndication Service Library

--

.Net framework 3.5 Ajax 技术

--

Ajax-enabled WCF Service (Both Web Application and Website)

添加服务引用和Auto-attaching

当用户需要创建自己的服务端程序时,使用添加服务引用技术可以自动生成这些服务对应的基本的客户端代码。

而使用Auto-attaching技术,可以使得用户从客户端程序到服务端程序的F5调试变得和在同一进程中调试一样简单。

WCF IT Pro 工具:

很多人应该多听说过或者使用过WCF IT Pro工具,因为这些工具的第一版是和Windows Vista一起发布的。现在它们也会作为Visual Studio 2008的一部分被安装。当Visual Studio 2008安装完毕后,你可以在Start Menu/All Programs/Microsoft Windows SDK v 6.0A/Tools目录下找到它们。

服务配置编辑器

这个工具提供了用户图形界面(GUI)帮助IT管理员和开发人员创建或更改WCF服务的配置,从而不必直接编辑XML文件。服务配置编辑器支持对WCF bindings, behaviors, services, 以及diagnostics的配置。

你可以直接在Visual Studio 2008中的WCF服务项目中,选中需要编辑的配置文件,使用右键菜单打开这个工具。

4

服务跟踪查看器

这个工具提供了图形化的界面,帮助用户查看、合并和过滤trace消息,从而更方便用户诊断、修复和验证WCF服务中的故障。

5

有用的链接:

关于WCF 工具:

http://msdn2.microsoft.com/en-us/library/bb552361.aspx

http://msdn2.microsoft.com/en-us/library/ms732015.aspx

关于Visual Studio 2008:

http://msdn2.microsoft.com/en-us/vstudio/default.aspx

Posted by WCFToolsBloggers | 1 Comments
Filed under:
 
Page view tracker