zzIIS站点中部署WCF项目 - C#

WCF IIS配置

IIS站点中部署WCF项目 - C#

分类: WCF2012-12-19 22:30 2929人阅读 评论(0) 收藏 举报

ArtechWCF IIS站点部署

[csharp] view plaincopy

.................全书之写印,实系初稿...执笔木坐,草草而止..个中甘苦,只自知之....── 引 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 命名空间中的函数实现。

[csharp] view plaincopy

  1. ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("iService");

下面是 IISClient 客户端源码。整个工程源码去后面下。

[csharp] view plaincopy

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using User.IIService.Interface;
  6. using System.ServiceModel;
  7. // 3 创建客户端 调用 IIS站点上的 WCF服务
  8. //        * 整个IIS站点部署WCF项目含: iService服务 + IISClient   [Version: IIS 5.1]
  9. //        * 添加 App.config客户端配置文件   [配置文件放在IISClient根目录会自动关联客户端]
  10. //        * IIService目录 映射成IIS虚拟目录 可以移动bin文件夹到其它地方含[IIService.dll/ICalculator.dll]即可。
  11. //        * 完成后 在 运行中输入 http://127.0.0.1/IIService/iService.svc 测试一下服务是否能正常显示 若可以。客户端可用了
  12. namespace IISClient
  13. {
  14. class Program
  15. {
  16. static void Main(string[] args)
  17. {
  18. ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("iService");
  19. ICalculator proxy = channelFactory.CreateChannel();
  20. using (proxy as IDisposable)
  21. {
  22. // 别急 。客户端调用有点慢。若看到了下面的这个结果。大功告成
  23. // 整个WCF项目的IIS站点部署与调用过程你都OK了。
  24. Console.WriteLine("[Add(-2, 13)] x + y = {0}", proxy.Add(-2, 13));
  25. Console.WriteLine("[Sub(-2, 13)] x - y = {0}", proxy.Sub(-2, 13));
  26. Console.WriteLine("[Mul(-2, 13)] x * y = {0}", proxy.Mul(-2, 13));
  27. Console.WriteLine("[Div(-2, 13)] x / y = {0}", proxy.Div(-2, 13));
  28. }
  29. }
  30. }
  31. }

 

 

二、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文本文件

[plain] view plaincopy

  1. <% =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样例源代码

时间: 2024-10-10 07:45:18

zzIIS站点中部署WCF项目 - C#的相关文章

IIS Internal Server Error &amp;IIS8中部署WCF服务出错:HTTP 错误 404.3 - Not Found

Http error      503. The service is unavailable. Due to appliction pool is stop and start it can resolve it Server Error Internet Information Services 7.5 Error Summary HTTP Error 500.19 - Internal Server Error The requested page cannot be accessed b

linux 环境下tomcat中部署jfinal项目

tomcat中部署jfinal项目 问题现象如下图 问题描述: 我在自己的windows7系统上tomcat下面跑这个项目没有任何问题吗,但是当我把项目上传到linux服务器上的tomcatwebapps目录下后,启动tomcat,服务器死活找不到工程目录. 然后我就郁闷了............. 分析运行环境: 本机: 系统  win7 64 tomcat 8.0.33 jdk版本 1.8.0_51 linux服务器: 系统   Linux version 2.6.32-431.el6.x8

Linux服务器上的tomcat中部署web项目

首先了解一下下面几个概念,讲得不太准确: 1.JVM JVM是class以及jar(实际上就是很多个class压缩在一起)的运行环境,特征就是java和javaw命令,通过这两个命令,你可以执行class和jar文件.你可以通过-classpath参数指定你需要加载的jar文件 2.JDK JDK就是JAVA的命令行开发环境,内置了JVM,特征就是javac命令,这个命令允许你将.java源文件批量或者单个编译成.class文件,从而可以通过JVM的java命令执行.在编译时你可以通过-clas

教你在裸机centos7系统中部署django项目

概要 本文用一台安装了centos7.5系统的裸奔的Linux机器(当然是虚拟机)详细讲解部署django项目的过程. 配置yum源 至于什么是yum源大家请自行百度,本人想用阿里云的yum源,因此需要在裸机上配置一下: 进入yum源的目录 cd /etc/yum.repos.d/ 查看yum源文件 ls -l 配置阿里云yum源 1.好习惯,备份yum源 mkdir repo_bak mv *.repo repo_bak/ 2.下载阿里云repo文件 wget http://mirrors.a

linux中部署django项目

通过Nginx部署Django(基于ubuntu) Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.nginx把所有静态请求自己来处理(这是NGINX的强项).然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求. 可见,uwsgi的作用就类似一个桥接器.起到桥梁的作用. Linux的强项

在eclipse中部署web项目

昨天在做实验的时候发现图片的路径不对,怎么改都不对,后来想到在浏览器中输入localhost:8080是tomcat服务器的路径,没找到资源是不是就是项没有部署到tomcat中,去tomcat的webapps中果然没有找到项目文件,于是就对项目进行部署. 首先,新建一个servers,项目右键,有Run as->Run on Server,如果之前没有会新建一个. 然后配置servers,要先把里面的项目移除,否则无法配置 然后双击打开,或者右键open,配置这两个地方deploy path 必

Visual Studio2012中搭建WCF项目

1.创建空的解决方案 2.新建项目-WCF服务库项目,项目名称:XfrogWCFService 3.在XfrogWCFService项目中添加[System.ServiceModel]的引用 4.上图是改项目的机构打开IFirstServices.cs这个是接口也是一个服务契约,客户端调用方法都必须遵守,代码如下. using System; using System.Collections.Generic; using System.Linq; using System.Text; using

在maven 中部署SSM项目找不 Spring ContextLoaderListener 的解决办法

1.项目使用技术:maven的项目使用了Spring MVC+Spring +Mybatis+Tomcat搭建一个项目. 2.报错信息: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener  java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoade

eclipse中部署web项目时报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener的解决方法

解决方案: 1.右键点击项目--选择Properties,选择Deployment Assembly,在右边点击Add按钮,在弹出的窗口中选择Java Build Path Entries 2.点击Next,选择Maven Dependencies 3.点击Finish,然后可以看到已经把Maven Dependencies添加到Web应用结构中了 操作完后,重新部署工程,不再报错了.然后我们再到.metadata\.plugins\org.eclipse.wst.server.core\tmp