Win7下使用IIS托管WCF服务

 

Win7下使用IIS托管WCF服务

 

第一步,确保Win7正确安装了IIS。

操作步骤:

  1. 打开控制面板-程序和功能-点击左侧“打开或关闭Windows功能”,在弹出框中选中“Internet信息服务”,需要注意的是有的需要将其展开,选中相关项。
  2. 在浏览器中输入http://localhost,如果出现了IIS启动界面,即表示IIS安装成功。

 

第二步,在进行IIS托管WCF服务之前,先建立一个asp.net程序试下。

由于Win7+VS2010使用的是.Net 4.0,所以需要确保注册了asp.net 4.0。

操作步骤:

  1. 进入C:\Windows\System32找到cmd.exe,右键“以管理员身份运行”,然后在控制台输入:cd C:\Windows\Microsoft.NET\Framework\v4.0.30319切换到该目录
  2. 然后输入:aspnet_regiis.exe –i,就会看到正在注册,以及注册成功的提示信息。

备注:最好使用控制台来进行asp.net的注册,其实也可以直接以管理员身份运行aspnet_regiis.exe,但是会看不到是否成功的提示!

第三步:创建解决方案,并发布asp.net网站

操作步骤:

  1. 创建一个默认的asp.net网站,不用更改其中任何东西。
  2. 在项目上,右键“属性页”,在“启动选项”中的“特定页”和服务器,进行如下设置:

 

需要注意的是,这时如果你在项目上右键-在浏览器中查看,会发现不能访问。

  1. 鼠标右键-发布网站,出现如下图所示对话框:

 

点击“目标位置”进入如图对话框:

 

选择“文件系统”,即表示你要将你的网站发布到的本地计算机的位置,在第四步建立网站的时候会引用。

备注:由于,我们没有修改代码,应该发布会很顺利。

第四步:建立站点。

操作步骤:

  1. 控制面板-管理工具-Internet信息服务(IIS)管理器,双击进入。或者,从桌面的计算机/我的电脑-鼠标右键“管理”-展开“服务和应用程序”-选择“Internet信息服务(IIS)管理器”也看进入。
  2. 在左侧,应用程序池,点击可以看到右侧详细的右侧应用程序池列表,右击空白处“设置应用程序池默认设置”-第一项“.NET Framework版本”,选择v4.0。
  3. 右键左侧“网站”-选择“添加网站”,输入“网站名称”,物理路径中引用第三步发布网站的目录,IP地址输入127.0.0.1表示本地,端口不变,主机名暂不输入,如果输入了可能不能访问。好了,点击确定就OK了。
  4. 接下来,做一些小的设置。首先,由于IIS 7默认使用的是VB,而我使用的是C#,所以需要设置下。点击你建立的网站,会发现左侧的一些设置选项,如下图:

 

具体可能,你看到的和这里不一致,有的与版本有关,还有的就是和你之前安装IIS选项有关。首先,选择双击第一个“.NET编译”,默认语言选择为:C#;接着双击选择IIS中的ASP,在行为中设置“启用父路径”为true;最后一个双击选择“目录浏览”,最右侧选择“启动”。

5.回到你站点,右键“管理网站”-“浏览”,会弹出启动浏览器,如果你已经可以看到默认的asp.net网站,那就表示已经OK了。

由于,有的操作步骤可能不是按照我上面的来的,可能会出现下面的错误信息:

 

找不到“ManagedPipelineHandler”模块的错误信息,那就是因为没有注册asp.net4.0的缘故,返回执行第二步。

注意:在第四步的时候,我们并没有建立域名绑定,如果设置了主机名,我们需要在C:\Windows\System32\drivers\etc中的hosts文件中添加一行:

127.0.0.1 主机名

这样,你就可以通过域名访问你的站点了。

第五步:建立WCF服务,托管到IIS。

这里,我使用WCF服务库+WCF服务应用程序+启用了AJAX的WCF服务。

  1. 创建WCF服务库,在解决方案中新添加一个“新建项目”,选择WCF中的“WCF服务库”向其中添加服务。
  2. 创建WCF服务应用程序,在解决方案中再添加一个“新建项目”,选择WCF中的“WCF服务应用程序”,想其中添加对WCF服务库的引用,即右键-“添加引用”-选择“项目”。接下来修改*.svc文件,删除其中不必要的东西,修改如下:

<%@ ServiceHost Language="C#" Debug="true" Service="*.*Service"%>

   其中关键的地方时Service属性,是对之前WCF服务库的引用。

  1. 在WCF服务应用程序中创建启用了AJAX的WCF服务的项目,添加这个项目的目的是解决跨域的问题。对于这个文件有几点需要注意,这里主要针对配置文件进行说明:

a)         允许客户端脚本的运行:

<behaviors>

      <endpointBehaviors>

        <behavior name="behavior1">

          <webHttp />

        </behavior>

        <behavior name="behavior2">

          <enableWebScript /><!--//注意这里à

        </behavior>

      </endpointBehaviors>

      <serviceBehaviors>

        <behavior name="">

          <serviceMetadata httpGetEnabled="true" />

          <serviceDebug includeExceptionDetailInFaults="false" />

        </behavior>

      </serviceBehaviors>

    </behaviors>

b)         绑定,允许跨域访问:

<bindings>

      <webHttpBinding>

        <binding name="bind1" crossDomainScriptAccessEnabled="true"/><!--//允许跨域访问à

      </webHttpBinding>

    </bindings>

c)         对服务应用地址,绑定,行为,契约进行设定:

<service name="servicename">

        <endpoint address="" behaviorConfiguration="behavior2"<!—上面行为的设置名称à

        bindingConfiguration="bind1"<!—上面绑定设置的名称à

  binding="webHttpBinding" contract="*.*Service" <!—与WCF服务库对应à/>

      </service>

在这里,有必要说明一些问题:

首先,启用了AJAX的WCF服务不是必须的,假如你没有使用跨域,或者你使用的不是纯粹的html页面通过js访问,你都可以不考虑通过这个服务来调用WCF服务。

然后是,我们没有必要将启用了AJAX的WCF服务和WCF服务应用放在一起,完全可以将其二者独立,减少二者的耦合度。我们可以使用svcutil.exe工具来实现。我们会在稍后回过头来对此详细说明。

d)         对服务应用地址,绑定,行为,契约进行设定:

 

第六步:调用托管到IIS的WCF服务。

这里,我们以一个ASP.NET空WEB应用来说明,目的是想通过纯粹的html页面实现WCF服务。

1.准备工作,创建一个静态html页面,添加jquery文件,这里由于针对的是跨域访问,所以我们使用getJSON方法。

posted on 2013-03-23 12:47  larryle  阅读(419)  评论(0编辑  收藏  举报