WCF服务发布到IIS时候,只能根据hostname访问,不能根据IP地址访问的解决办法

简介: 本文转载:http://www.cnblogs.com/deerbox/archive/2013/05/13/3076248.html 环境: VS2010 sp1,.net framework 4.0,windows server 2003 x64 ,iis 6.0 症状: WCF开发测试,本地调用都正常。

本文转载:http://www.cnblogs.com/deerbox/archive/2013/05/13/3076248.html

环境:

VS2010 sp1,.net framework 4.0,windows server 2003 x64 ,iis 6.0

症状:

WCF开发测试,本地调用都正常。发布后,在浏览器中访问http://ip/Service.svc,可以正常浏览,但svcutil.exe 显示的是域名:http://域名/Service.svc

在VS中,添加服务引用,地址输入http://ip/Service.svc,点击前往,提示错误,内容如下:

复制代码
URI http://ip/Service.svc 处的文档未被识别为已知的文档类型。
来自各已知类型的错误信息可能有助于修复该问题:
- 来自“XML 架构”的报告是“无法识别此文档格式(内容类型为“text/html; charset=UTF-8”)。”。
- 来自“http://ip/Service.svc”的报告是“无法识别此文档格式(内容类型为“text/html; charset=UTF-8”)。”。
- 来自“DISCO 文档”的报告是“下载“http://域名/Service.svc?disco”时出错。”。
  - 未能解析此远程名称: '域名'
- 来自“WSDL 文档”的报告是“无法识别此文档格式(内容类型为“text/html; charset=UTF-8”)。”。
元数据包含无法解析的引用:“http://域名/Service.svc”。
服务 http://ip/Service.svc 不支持内容类型 application/soap+xml; charset=utf-8。客户端和服务绑定可能不匹配。
远程服务器返回错误: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'.。
如果该服务已在当前解决方案中定义,请尝试生成该解决方案,然后再次添加服务引用。
复制代码

解决方案: 网上看了很多帖子,有说ip绑定的,有说设置防火墙的,等等,试过都不行。

很多网友都遇到此问题,非常郁闷,抱着大无畏的探索精神,最终找到两个解决方案:

1、修改客户端hosts文件,路径C:\Windows\System32\drivers\etc,在hosts文件里添加一个映射:

ip 域名

例如:102.54.94.97     rhino.acme.com

2、上面的办法,显然很山寨,我们不能要求使用服务的每一个客户端都去修改自己的hosts文件。最终还是需要在服务端解决。

解决方案参考:http://support.microsoft.com/kb/971842 

When you use a Windows Communication Foundation (WCF) service in load-balanced scenarios in the Microsoft .NET Framework 3.0 in Windows Server 2003, Windows XP, Windows Vista and Windows Server 2008, you experience one or more of the following issues:

.....

In this scenario, when you try to generate a proxy from the metadata, the process fails because the metadata contains URIs that reference internal Web site instances.

步骤:

首先下载补丁包:http://archive.msdn.microsoft.com/KB971842/Release/ProjectReleases.aspx?ReleaseId=3228

安装后会提示重启,忽略之。

然后修改wcf的配置文件,添加红色部分部门,或者通过wcf配置文件编辑器,添加useRequestHeadersForMetadataAddress配置

复制代码
<behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <useRequestHeadersForMetadataAddress>
            <defaultPorts>
              <add scheme="http" port="8002" />
              <add scheme="https" port="8002" />
            </defaultPorts>
          </useRequestHeadersForMetadataAddress>
        </behavior>
      </serviceBehaviors>
    </behaviors>
复制代码

重新发布,问题解决。

 

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
3月前
|
网络协议 文件存储 数据安全/隐私保护
【搭建服务器】Win10 IIS搭建webdav服务以及公网访问教程 - 挂载webdav
【搭建服务器】Win10 IIS搭建webdav服务以及公网访问教程 - 挂载webdav
|
9月前
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
5月前
|
开发框架 .NET Apache
windows安装IIS服务
windows安装IIS服务
36 0
|
6月前
|
C# Windows
C#建立最简单的web服务,无需IIS
C#建立最简单的web服务,无需IIS
|
8月前
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
38 0
|
8月前
|
安全 数据库连接 数据库
WCF服务创建到发布(SqlServer版)
在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构。该架构的项层为服务模型层。 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案。且能与已有系统兼容写作。 简单概括就是:一组数据通信的应用程序开发接口。
57 0
|
8月前
|
XML 数据格式 Windows
IIS服务启动提示当文件已存在时,无法创建该文件,183
IIS服务启动提示当文件已存在时,无法创建该文件,183
233 0
Visual Studio 2022 创建 WCF服务 找不到
Visual Studio 2022 创建 WCF服务 找不到
|
11月前
|
Windows
windows server 2008 r2 IIS服务403-禁止访问访问被拒绝
windows server 2008 r2 IIS服务403-禁止访问访问被拒绝
196 0
|
C++
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
102 0
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题