.................全书之写印,实系初稿...执笔木坐,草草而止..个中甘苦,只自知之....── 引 Artech .<<WCF全面解析>>.................
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
本文。这、是一个基于IIS服务调用的 WCF 例子。。。。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[前言]
编程工具 VS2010 语言:C#
IIS 版 本 IIS 5.1
说 明
1) 本文系初稿,先上图。。下面将解释这两张图。。算是对WCF入门知识的总结。一步一步引导你在IIS站点中部署 WCF项目。。共勉。。鄙人能力有限,若文字描述有错请指正。谢。。。。
2) 本文提供的例示代码源于Artech的《WCF全面解析 上册》。下面的内容 我讲 Artech 没讲到的东西。
3) 本文最后 提供所讲源代码下载。。
图1 显示IIS站点中部署成功的WCF计算服务 图2 Client测试对WCF服务的成功调用
IIS站点中部署 WCF项目
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[正 文] 本文涉及到的内容只有三个字:关键词
[关 键 词] WCF项目创建;IIS服务安装;Server Application Error;MSDTC服务安装; 虚拟映射;IIS服务中部署测试项目;IIS服务中部署WCF项目;
[内容核心] 将一个基于WCF计算器的服务部署在IIS站点中,创建一个客户端调用寄宿在IIS进程中的服务。实现 前言中 图2所示的简单的加减乘除运算。
一、创建WCF项目 IIService工程
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 如图3所示。用VS2010创建一个名为 IIService的空工程,并删默认生成的第一个空项目。
2. 在空的工程中右键添加三个项目 ICalculculator、IIService、IISClient
ICalculculator: Class Library 项目,创建服务接口<契约> ICalculator 含 4个方法、将接口定义成服务契约。
IIService: Class Library 项目,实现ICalculculator接口,创建WCF服务。
IISClient: Console Application项目,创建客的户端 调用 IIS站点上的 WCF服务。
图3 创建 WCF项目 IIService工程
当你看到这儿的时候,不过得提一下。A
1)Artech在《我的WCF之旅(1):创建一个简单的WCF程序》中已经请清楚了WCF应用的基本结构模型与如何创建一个WCF项目。我不再重复Artech里面的内容。
2) 至于这个项目的源代码与《我的WCF之旅(1):创建一个简单的WCF程序》的源代码 在这篇文章的最后 我会免费分享给大家在CSDN上下载。
3) 配置文件路径问题 App.config / Web.config 如何与应用程序相关联?
IISClient / IIService中有两个配置文件。App.config / Web.config
答曰:自动关联。e.g.IISClient 如下示。在创建channelFactory对像时会在根目录自动搜寻App.config
由 System.ServiceModel 命名空间中的函数实现。
ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("iService");
下面是 IISClient 客户端源码。整个工程源码去后面下。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using User.IIService.Interface;using System.ServiceModel;// 3 创建客户端 调用 IIS站点上的 WCF服务// * 整个IIS站点部署WCF项目含: iService服务 + IISClient [Version: IIS 5.1]// * 添加 App.config客户端配置文件 [配置文件放在IISClient根目录会自动关联客户端]// * IIService目录 映射成IIS虚拟目录 可以移动bin文件夹到其它地方含[IIService.dll/ICalculator.dll]即可。// * 完成后 在 运行中输入 http://127.0.0.1/IIService/iService.svc 测试一下服务是否能正常显示 若可以。客户端可用了namespace IISClient{ class Program { static void Main(string[] args) { ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("iService"); ICalculator proxy = channelFactory.CreateChannel(); using (proxy as IDisposable) { // 别急 。客户端调用有点慢。若看到了下面的这个结果。大功告成 // 整个WCF项目的IIS站点部署与调用过程你都OK了。 Console.WriteLine("[Add(-2, 13)] x + y = {0}", proxy.Add(-2, 13)); Console.WriteLine("[Sub(-2, 13)] x - y = {0}", proxy.Sub(-2, 13)); Console.WriteLine("[Mul(-2, 13)] x * y = {0}", proxy.Mul(-2, 13)); Console.WriteLine("[Div(-2, 13)] x / y = {0}", proxy.Div(-2, 13)); } } }}
二、IIS服务中部署WCF项目 IIService
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
到这儿的时候。如果你是一个asp.net编程者,你会经历过IIS站点上Web服务的部署.但,如果你不是,很不幸,那就得从0开始。好吧。我也从0开始。
从IIS服务的安装→问题的程现→问题的解决→IIService成功的部署→客户端的成功 调用。这是一个过程。学的过程。。。
问题:“两个步骤:为WCF服务创建.svc文件和创建IIS虚拟目录。”
这是程个过程。而如果对Artech来讲。这只是一句话,不得不说声报歉,这一句话,Artech《WCF全面解析》的这一句话,我用了两天时间去理解那整个过程。 以前我是C/C++程序员,我听过IIS,但我从不知道也没部署过Web服务。如果你像我一样,那这篇文章对你来说就有用了
也是一句话:个中甘苦,只自知之。。感悟去吧。。。
1. IIS服务的安装解决第一个工具-Internet Information Services (IIS) Manager
转去温故这篇文章: 《 IIS服务的安装-在IIS站点部署WCF项目 序》
IIS服务的安装 ,如果不知道。。这儿有了。。这篇文章帮你解决。。如果知道。跳过吧。。。
2. 创建IIS虚拟目录 第一个asp.net测试程序的创建 + 演示
IIS服务装好了。现在我们来部署第一个asp测试程序。。试一下我们IIS站点中如何访问我们的创建的页面。。
方法:
1) 创建IIS虚拟目录
在 D盘文件夹下创建 D:\VisualWeb
并在里面新建一个文本文件Index.asp在里面输入 。需开启 "隐藏已知文件类型的扩展名"<在 [工具]-[文件夹选项]-[隐藏已知文件类型的扩展名]把勾去了就OK> 否则Index.asp会是Index.asp.txt文本文件
<% =now()%>
保存
如图4示所。
图4 创建IIS虚拟目录
2) D:\VisualWeb 映射为IIS虚拟目录
如图5所示。右键选中 [默认网站]-[新建]-[虚拟目录]
输入 虚拟目录名称 VisualWeb下一步选择D:\VisualWeb的路径即可。
完成后会在 [默认网站]下面出现一个VisualWeb文件夹,单击会显示 VisualWeb中的内容 Index.asp
图5 D:\VisualWeb 映射为IIS虚拟目录
图6 映射结果
3) i演示
如图5所示。右键浏览 若你幸运。出现下面的结果。则后面的事少了很多。。IIService部署问题也就没了。。说明IIS站点中部署项目可以访问了。。
图7 第一个asp测试程序成功
三、IIS部署中的问题:Errors
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
如果不幸。你没看到 图 7.看到了下面。。说明你就会麻烦了
1. 无权查看网页
[说明]: 对于编设动态脚本的网页,可以对浏览器作如下设置 工具- Internet选项-高级-显示友好http错误信息
Tip:这样在测试项目时能知道详细信息。。。important!
2.Server Application Error
Server Application Error The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.
答曰:无权查看网页
这个问题比较好解决。说明你磁盘访问权限出了问题。。为磁盘分区添加Everyone权限即可。
如果你研究过 Adminstrator与Guest与Users权限问题。这将很有趣。。感兴趣的不访去研究一下。这在多人共用一台电脑时对磁盘的访问权权很有用。。不过这问题你们一般不会用到。不深入了。。
说明: 开启下图 [安全] 标签
1) 得去 [工具]-【文件夹选项】-[查看]-把 [使用简单文件共享]的勾去掉。才会显示。。
2) windows系统默认情况下是关闭该功能的。这意味着你是看不到图8的。
如图8所示
图8 为磁盘添加Everyone权限
答曰:Server Application Error比较麻烦。
1) 因为你要用在大堆命令。像我一样去了解IIS服务的 Inetpub目录及 n多.vbs文件的使用。。
2) 去了解 IWAM_COMPUTERNAME 及 IUSR_COMPUTERNAME 这两个在WEB服务中的作用。。。
不过这问题已经有答案了。。下面的已经经我验证过了。。如果遇到,你不用找了。感谢这篇文章的作者吧。。。
iis出现 Server Application Error 错误解决方法
四、IIS服务中部署WCF项目-Client测试
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
按 2. 创建IIS虚拟目录 第一个asp.net测试程序的创建 + 演示
Client测试步骤
1)在 [默认网站] 下创建一个 IIService 虚拟目录。
2)把 D:\IIService\IIService\IIService 即 WCF服务 IIService所在的路径 直接映射为 IIS的虚拟目录。如图9所示。
3) 右键 [浏览] iService.svc你将看到本文的开篇 [图1显示IIS站点中部署成功的WCF计算服务] 中显示的 Web.config结果。证明 WCF服务[iService.dll]已经寄宿到 dllhost.exe进程中,即IIS进程中。。[dllhost.exe进程见 附录1] iService.svc 附录2 源代码
4)运行 IISClient,单步调试 你会看到 图2Client测试对WCF服务的调用 的结果。。。 回头去看那两张图1/图2吧。
图4.1 映射结果
图 4.2 IISClient运行
现在可以直接运行 IISClient了。。
..............最后
附录1:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IIS 不同版本不同宿主进程:
1)IIS5与IIS6架构不同.IIS 5.x(dllhost.exe) IIS6.0(W3WP.exe issapp.vbs提供命令操作)
2)Artech提到的是IIS 6.0 所以才会有W3WP.EXE进程。在 windows xp sp3的任务管理器中,你是看不到w3wp.exe进程的。你只能看到 dllhost.exe进程。iService.dll寄宿在 dllhost.exe进程中。可以用 tasklist /svc查看 dllhost.exe的 PID
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
寄宿在 IIS 5.X 进程 dllhost.exe 中的不同 服务用 不同的 PID来区分。运行 帐户为 前面提到的 IWAM_YOURCOMPUTERNAME <[任务管理器]-[进程]中可查看 dllhost.exe运行帐户> 如图 X所示。 但是我用tasklist/svc的 [服务] 中去看不到 iService.dll 寄宿在 dllhost进程中的服务。。目前在纠结这问题。。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3) Dllhost是 COM+的宿主进程,IIS使用DLLhost来运行ASP与其它脚本引擎。COM+独立运行要采用IWAM_COMPUTERNAME用户运行 (现在知道IWAM_XX的作用了吧)
4) windows xp sp3以下的是 dllhost.exe 启动方式是 IIS Admin服务<Inetinfo.exe进程: 运行web服务管理进程,负责管理 www服务 smtp服务 ftp服务 nntp服务> 可以用 services.msc 查看 inetinfo.exe进程的别名就是 IIS Admin服务。
5) MSDTC可以google或baidu下。。这在Server Application Error中有讲到。。请细看。。
图 X
附录2:文中提到的源代码下载
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1、IIS站点中部署 WCF项目 C#源代码
2、我的WCF之旅:计算器 WCF样例源代码
.........all over。。。