WCF服务发布到IIS中去(VS2013+win7系统)

第一个WCF程序

  1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序。建立完成后如下图所示:

  2.删除系统生成的两个文件IService1.cs与Service1.svc。

  3.添加自定义的WCF【服务文件】User.svc,此时vs2010会自动生成WCF接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs对该接口的方法进行实现。

代码如下:

using System.ServiceModel;

namespace WCFService
{
    [ServiceContract]
    public interface IUser
    {
        [OperationContract]
        string ShowName(string name);
    }
}

namespace WCFService
{
    public class User : IUser
    {
        public string ShowName(string name)
        {
            string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
            return wcfName;
        }
    }
}

大家可以看到,在WCF中的接口与普通接口的区别只在于两个上下文,其他的和我们正常学习的接口一样。定义这个上下文要添加System.ServiceModel的引用。

[ServiceContract],来说明接口是一个WCF的接口,如果不加的话,将不能被外部调用。

[OperationContract],来说明该方法是一个WCF接口的方法,不加的话同上。

此时我们的第一个WCF服务程序就建立好了,将User.svc“设为起始页”,然后F5运行一下试试,如下图所示,VS2010自动调用了WCF的客户端测试工具以便我们测试程序:

  我们双击上图中的 ShowName() 方法,出现如下图:

  在请求窗口中的值中输入参数“你的姓名”,然后点击“调用”,在响应窗口中会出现返回值“WCF服务,显示姓名:你的姓名”,说明测试成功,点 击下面的XML也可以看到XML的数据传输。我们现在建立好了服务的应用程序和业务逻辑,即非常简单的打印姓名的方法,测试也成功了。那么我们怎么用呢?

目前来说我们是在wcf测试工具上可以正常调用wcf了,而我们现在想要把它发布到iis上,所以下面就是对iis的配置了。

第一步:检查Windows7中IIS是否安装了必要的组件

方法:控制面板->程序和功能->打开或关闭Windows功能

以下图片中标注的功能Windows7默认不会安装的

第二步:检查IIS的配置

系统必备安装完成后打开IIS服务管理器,点默认网站,双击“处理程序映射”如下图

检查一下下图中红色标注部分是否已经存在,否则WCF服务是无法调用的。不幸如果没有找到这几个"兄弟"的话方法如下

安装注册WCF组件

1、运行cmd命令行工具。(开始 ==> 运行 ==> cmd回车)
(注意!!如果使用Windows Vista或7的话,务必使用administrator管理员身份运行,否则可能导致下面的操作无法继续!)

2、进入WCF文件夹:
cd C:\WINDOWS\Microsoft.NET\Framework\v3
.0\Windows Communication Foundation

3、运行ServiceModelReg.exe工具,会得到如下帮助信息:
=================
C:\Documents and Settings\Administrator>cd c:\WINDOWS\Microsoft.NET\Framework\v3
.0\Windows Communication Foundation

C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation>Service
ModelReg
Microsoft(R) Windows Communication Foundation 安装实用程序
[Microsoft (R) Windows (R) Communication Foundation, 版本 3.0.4506.2152]
版权所有 (c) Microsoft Corporation。保留所有权利。

管理一台计算机上的 Windows Communication Foundation
的安装和卸载的管理实用程序

用法:
   ServiceModelReg.exe [-i[r | ru] | -u | -ua | -r | -s:<path> | -sn:<path>
   | -k:<path> | -kn:<path> | -lv | -lk | -vi] [-y] [-x] [-q | -v] [-nologo]
   [-?]
-i         - 安装此版本的 Windows Communication Foundation,并更新
             IIS 元数据库根处的脚本映射和根以下的所有脚本映射。
             现有的较低版本的脚本映射会升级至此版本。

-ir        - 安装此版本的 Windows Communication Foundation,
             仅注册。不要在 IIS 中安装 Windows Communication Foundation
             脚本映射。
-iru       - 安装此版本的 Windows Communication Foundation。如果
             存在使用 Windows Communication Foundation 的任何现有
             应用程序,不要在 IIS 中更新它们的脚本映射。
-u         - 卸载此版本的 Windows Communication Foundation。
             将此版本现有脚本映射会重新映射到计算机上剩余的
             已安装的最高版本的 Windows Communication Foundation。

-ua        - 卸载计算机上所有版本的 Windows Communication Foundation。

-r         - 重新安装此版本的 Windows Communication Foundation,
             并更新 IIS 元数据库根处的脚本映射和根以下的所有
             脚本映射。无论原始版本是什么,都将现有的脚本映射
             升级到此版本。
-x         - 包含作为该安装操作一部分的 Windows Communication
             Foundation 自定义操作脚本。
-s:<path> - 在指定的路径以非递归方式安装此版本
             的 Windows Communication Foundation。
             例如,ServiceModelReg.exe -s:W3SVC/1/ROOT/SampleApp1
-sn:<path> - 在指定的路径以非递归方式安装
             此版本的 Windows Communication Foundation。
-k:<path> - 从指定的路径中以递归方式删除所有版本的 Windows
             Communication Foundation 的所有脚本映射。
             例如,ServiceModelReg.exe -k:W3SVC/1/ROOT/SampleApp1
-kn:<path> - 从指定的路径中以非递归方式删除 Windows Communication
             Foundation 的所有版本的所有脚本映射。
-lv        - 列出在该计算机上安装的所有版本的 Windows Communication
             Foundation,以及状态和安装路径。
-lk        - 列出对 Windows Communication Foundation 进行脚本映射
             的位置的所有 IIS 元数据库密钥,以及该版本。将不会
             显示从父密钥继承 Windows Communication Foundation
             脚本映射的密钥。
-vi        - 确认目标组件的安装并生成报告。组件可以处于下列状态:
              未知、未安装、已进行默认安装或已进行自定义安装。

-y         - 在卸载或重新安装组件之前不要求确认。

-q         - 安静模式(减少输出信息)。
-v         - 详细模式。
-nologo    - 取消版权和标题消息。
-?         - 打印此帮助文本。
=================
4、注册WCF组件,执行:ServiceModelReg.exe -i 回车

如果出现下面的信息,说明注册成功了:
=================
C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation>Service
ModelReg -i
Microsoft(R) Windows Communication Foundation 安装实用程序
[Microsoft (R) Windows (R) Communication Foundation, 版本 3.0.4506.2152]
版权所有 (c) Microsoft Corporation。保留所有权利。

正在安装: Machine.config 节组和处理程序

正在安装: System.Web 生成提供程序

正在安装: System.Web 编译程序集

正在安装: HTTP 处理程序

正在安装: HTTP 模块

正在安装: Web 主机脚本映射

安装完成后打开IIS

在网站上右键,选择添加网站,在物理路径输入wcfservice项目的路径,然后随便指定一个网站名称即可。

然后在我们自己的wcf项目上右键,点击添加虚拟目录,选择到wcf项目的路径,然后随便取一个别名,添加后如图所示。

点击虚拟目录,然后右键选择 转换为应用程序,如图所示

启动网站,在右边的Service1.svc,右键选择浏览即可

IIS最终配置图片是这样,可以看到网站已经添加进来了,并且加入了虚拟目录(最下面的test目录),虚拟目录也转换为了应用程序(变成了浏览器的图标)

如果配置正确的话,可以看到如下界面,此时我们就已经把webservice发布到iis上了

当然,我不是用创建虚拟目录这种方式发布的。vs2013用的是.net4.5的语言版本,采用本地发布,然后通过iis附加网站的形式,结果出现了一堆错误。

1.无法激活服务,WCF设置ASP.NET 兼容性

错误提示:无法激活服务,因为它不支持 ASP.NET 兼容性。已为此应用程序启用了 ASP.NET
兼容性。请在 web.config 中关闭 ASP.NET 兼容性模式或将 AspNetCompatibilityRequirements
属性添加到服务类型且同时将 RequirementsMode 设置为“Allowed”或“Required”。

解决办法:

修改相应   服务.svc.cs

using System.ServiceModel.Activation ;

[AspNetCompatibilityRequirements (RequirementsMode=AspNetCompatibilityRequirementsMode.Required)]

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class CalculatorService : ICalculatorSession
{

...

}

web.config中
 </services>
    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
      <baseAddressPrefixFilters>
        ...
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
    
    <behaviors>

2.未能加载文件或程序集“xxx”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集  

1、主要原因是:引用的项目 .net 版本与启动的框架不同

windows xp

我的电脑->右键管理->Internet信息服务->默认网站->右键属性->ASP.NET->> 更改相应的asp.net版本即可

windows 7

我的电脑->右键管理->Internet信息服务(IIS)管理器->双击打开->单击应用程序池->双击要修改的网站->将.NET Framework 版本修改为相对应的版本即可

2、调试wcf服务时

iis程序池 net framwork 版本和自己项目的net framwork版本不一致造成的,修改iis程序池配置,调试ok。

3、调整中会出现“未能加载文件或程序集 或它的某一个依赖项,拒绝访问”

方法一、停止Indexing   service服务   
 方法二:配置ASP.net   的临时目录不受Indexing   service服务的影响   
 方法三:删掉bin目录下的pdb文件   
方法四:修改windows/temp目录权限,设asp.net   Machine   Account为对这个目录的完全控制权限
等,但都不能解决问题。

原因是对asp.net对临时文件夹没有读写权限造成的,对C:/WINDOWS/Microsoft.NET/Framework
/v2.0.50727/Temporary ASP.NET
Files目录授权就可以彻底解决问题,到目前为止还没有遇到不能解决的,但前提是文件确实存在,不缺少文件。

4、删除掉并重新加载dll文件,并确保dll文件已经引用到bin文件夹中;

5、赋予C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files读写权限。

整理了上面几个方法仅供参考,经过一番折腾我发现是我的Web.config中的版本问题,因为我的本地的编写软件使用了最新的是VS2010编写的版本4.0而我的服务器空间的是V3.5的,所以我采用了第四中方法把原来的dll文件删除,上传最新的之后就可以运行。

3.处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

原因:

vs2010默认的是4.0框架,4.0的框架是独立的CLR,和2.0的不同,如果想运行4.0的网站,需要用aspnet_regiis注册4.0框架,然后用4.0的Class池,就可以运行4.0的web项目了.

如何用aspnet_regiis注册4.0框架 :

方法如下,启动cmd (win键+R 启动cmd)  ,找到 4.0所在的目录,本人机器目录是 ;

注意:要以管理员的身份运行DOS窗口。

复制目录  C:\Windows\Microsoft.NET\Framework\v4.0.30319

运行  aspnet_regiis.exe -i

安装完成,这时的IIS就可以运行 .net 4.0 部署的网站了.

可以正常运行的wcf项目的配置文件如下:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="connStr" connectionString="server=10.1.0.17;database=wupublic;uid=slpgdm;[email protected]"/>
    <add name="conString" connectionString="server=10.1.0.17;database=BankLoan;uid=slpgdm;[email protected]"/>
  </connectionStrings>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>
  </appSettings>
  <system.web>
    <!--<compilation debug="true" targetFramework="4.5" />-->
    <!--<httpRuntime targetFramework="4.5"/>-->
    <compilation debug="true"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <!--<behavior>
          -->
        <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
        <!--
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          -->
        <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
        <!--
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>-->
        <behavior name="MyBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <!--<protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>-->
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
    <services>
      <service behaviorConfiguration="MyBehavior" name="WcfService.Service1">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="NewBinding0" contract="WcfService.IService1"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="NewBinding0" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          <security mode="None"/>
        </binding>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
        在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

IIS网站本机可以访问,局域网其他机器无法访问的问题:

在部署网站到服务器的时候,发现本地访问网站没问题,但是局域网其他机器无法访问,或者在把相应端口映射后,外网也无法访问初步解决方案——防火墙规则

开始】打开【控制面板】,选择【WINDOWS 防火墙】,进入

在防火墙界面,选择左侧边栏的【高级设置】

在弹出的高级安全Windows防火墙界面中,选择左侧边栏的【入站规则】,然后在右侧边栏选择【新建规则】

在弹出的窗口中完成如下操作:

1.选择【端口】,下一步;

2.选择【TCP】以及【特定本地端口】,填入要开放的端口号(或开放所有端口,可以以逗号分隔多个端口),下一步;

3.【允许连接】,下一步;

4. 网络类型全部勾选,下一步;

5.【名称】中填入自定义名称,如:IIS 【完成】。

时间: 2024-10-21 04:39:37

WCF服务发布到IIS中去(VS2013+win7系统)的相关文章

创建WCF服务寄宿到IIS

一.WCF简介: Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台. 整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术. 由 .NET Framework 3.0 开始引入. WCF的最终目标是通过进程或不同的系统.通过本地网络或是通过Internet收发客户和服务之间的消息. WCF合并了Web

WCF服务使用(IIS+Http)和(Winform宿主+Tcp)两种方式进行发布

1.写在前面 刚接触WCF不久,有很多地方知其然不知其所以然.当我在[创建服务->发布服务->使用服务]这一过程出现过许多问题.如客户端找不到服务引用:客户端只在本机环境中才能访问服务,移植到其他机器上就不能访问服务(权限问题)等问题.所以写下这篇文章把我使用http和tcp这两方式部署服务所出现的问题以及解决方案记录下来,方便自己下次查看,也可以当作初学WCF的一个入门小示例吧. 2.建立一个WCF服务 首先要编写一个WCF服务,我在这里提供一个通过名字查询年龄的服务,代码如下: 服务契约:

II7 承载的WCF服务,在VS中添加引用出错

场景: 1.WCF 服务成功部署到 IIS7,测试方式: 1)浏览器可以打开svc 和 wsdl 如: http://IP地址:8087/WCFService/MyService.svc http://IP地址:8087/WCFService/MyService.svc?wsdl 2) 手动编写客户端,调用相关方法亦成功 注意:上面测试中“IP地址”,代表实际的IP地址. 2.使用工具自动生成客户端代理失败 1)使用VS 自带的添加服务引用工具时,失败信息如下: 解了文档内容,但无法进行处理. 

asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示“处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”” 一,上述错误详情为 二.上述错误分析:  vs2010默认采用的是.NET 4.0框架,4.0框架是独立的CLR,和.NET 2.0的不同,如果想运行.NET 4.0框架的网站,需要用aspnet_r

无法用Put方式请求发布在IIS中的WebAPI

WebApi程序发布到IIS上后,无法使用Put的方式进行请求,错误信息如下: 原因和解决方案: 在IIS中默认不支持Put请求和Delete请求,因为IIS中注册的WebDAVModule对Put请求和Delete进行了拦截,所以如果不需要再IIS中弃用WebDAV可以直接通过Webconfig文件移除这个HttpModule,配置如下: <configuration> <system.webServer> <modulesrunAllManagedModulesForAl

asp.net发布到IIS中出现错误:处理程序&ldquo;PageHandlerFactory-Integrated&rdquo;在其模块列表中有一个错误模块&ldquo;ManagedPipelineHandler&rdquo;

开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示"处理程序"PageHandlerFactory-Integrated"在其模块列表中有一个错误模块"ManagedPipelineHandler"" 我要发布的的web项目开发工具及所用系统 ①开发工具:vs2010.数据库:sqlserver ②操作系统:windows7 ③IIS:IIS 7.5

解决中64位Win7系统上PLSQL无法连接ORACLE的方法(PLSQL无法识别ORACLE_HOME的配置)

最近新安装了64位的Win7系统,工作中需要用oracle数据库,而数据库是公司IT的DBA进行管理和维护的. 我们只需要连接上去进行使用就可以了,于是我就在自己的机器上安装了oracle client x64和PL/SQL程序,oracle client也设置了环境变量等配置,但打开plsql的时候无法显示数据库,效果如下图: 于是,我自己到网上查了一下,网上说法很多,如下说明. 1.问题 Plsql到目前为止只有32位的程序,而大多数的桌面系统基本都是使用64位的windows操作系统,在6

wcf服务发布时,目录中没有文件生成

1.删除原有的配置文件 2.新建一个,重新配置即可

WCF服务器发布到IIS上面

最近公司用到wcf技术,不过不是我负责的,所以我自己在网上找了一个例子,自己测试了了一下.前面都很简单,就是发布以后布署到IIS上出了点问题: 一,是浏览网站时,出现如下错误 这是IIS不能解译”.svc”文件的问题.打开配置网站中的“处理程序映射”,查看有没有下面红框的内容: 如果没有,以管理员的身份运行“cmd.exe”,运行“cd 系统盘:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation”,再输入“