WCF部署IIS所遇到的问题 (解决404.17、.svc无法读取问题)

来源:互联网 发布:java业余培训 编辑:程序博客网 时间:2024/05/19 23:05

    经过上一篇文章的操作,已经有一个能在本地发布的wcf服务,如果是开发阶段的调试,那么就已经满足我们的需求,在客户端可以添加服务会自动发现本地上已经启动的wcf服务。如图所示


你会发现ip是localhost,此服务是本机默认的iis工具发布的svc文件的wcf服务。

那么如果我想把WCF服务部署的到另外一个机器上应该怎么操作?

那如果是产品上线 要部署 服务器上 那情况就会复杂的多了,以下几点是必须要做的,如果有遗漏的欢迎补充

1.首先要要讲wcf类库发布。

2.要部署的服务器 确保已经有.NetFrameWork 3.0+ 

3.安装iis6.0+

切记 一点要先安装 NetFrameWork  在安装iis 不然会报错

4.配置wcf站点ip和端口,如果服务是局域网内 那么选择服务器的静态ip就可以,端口不要重复而且不能有限制,能保证客户端能访问

!!!如果是外网服务器,那么ip就不需要设置,这一点很重要,

5.WCF站点下加一个跨域文件clientaccesspolicy.xml,保证wcf服务于客户端不在一个机器也能访问 不然也会报错

文件内容

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

然后在客户端的浏览器上输入地址svc文件的地址。如果正常会显示

 2015/9/15    13:14        <dir> aspnet_client 2016/4/21    14:58        <dir> bin 2015/9/15    12:57          340 clientaccesspolicy.xml 2015/9/15    14:36          126 Service1.svc 2016/4/21    14:58         2217 Web.config
如果出现HTTP 错误 404.17 - Not Found。这是会经常遇到的错误。
第一种可能是没有装wcf或者一般是在安装 Windows Communication Foundation (WCF) 之后安装了 IIS造成的
解决方法,以管理员身份进入命令行模式,运行:
"%WINDIR%\Microsoft.Net\Framework\v4.0.30319\aspnet_regiis" –i –enable"%WINDIR%\Microsoft.Net\Framework\v4.0.30319\ServiceModelReg.exe" -r -y
-r         - 重新安装此版本的 Windows Communication Foundation,              
            并更新 IIS 元数据库根处的脚本映射和根以下的所有              
            脚本映射。无论原始版本是什么,都将现有的脚本映射              
            升级到此版本。
-y         - 在卸载或重新安装组件之前不要求确认。
 一般是在安装 Windows Communication Foundation (WCF) 之后安装了 IIS造成,  运行以上命令将在 IIS 中注册所需的脚本映射。
此命令如果的目的是在所在的.netframework 路径下找到ServiceModelReg.exe 千万不要一样的copy 先在自己的电脑上找到相应的路径
例如我的电脑 是 .netframework4.0319的 那么就要用这个
如果完成以上操作 还是有错误,那就是没有正确配置 svc 文件类型已在 IIS 7.0 中正确映射
解决办法:
1.打开命令提示符窗口并键入 start inetmgr,以打开 Internet 信息服务 (IIS) MMC 管理单元。2.在左侧窗格中,展开包含计算机名称的节点,然后展开“网站”节点,然后选择“默认网站”。3.在“功能视图”中双击“处理程序映射”。4.在应用程序映射列表中验证 .svc 文件是否已映射到 aspnet_isapi.dll。如果尚未映射该文件:  (1). 单击“添加托管处理程序”。  (2). 在“请求路径:”中键入 *.svc。  (3). 在“类型”文本框中键入 System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089。  (4). 在“名称:”文本框中键入 svc-Integrated。5. 单击“确定”。6. 单击“添加脚本映射”。7. 在“请求路径:”中键入 *.svc。8. 在“可执行文件:”文本框中键入 %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll。9. 在“名称:”文本框中键入 svc-ISAPI-2.0。10. 使用“上移/下移”控件,确保托管处理程序 (svc-Integrated) 在列表中出现在 aspnet_isapi (svc-ISAPI-2.0) 处理程序之前。11. 单击“确定”。
现在浏览器输入设置的ip:端口+svc文件名称 就不会出现错误了 我的是局域网本机服务器部署 以上wcf外部部署的时候通常会遇到的问题的总结,本文章还会持续补充,如果有问题欢迎交流

0 0