WCF发布后远程访问的域名解析问题

环境:

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>

时间: 2024-10-30 15:54:06

WCF发布后远程访问的域名解析问题的相关文章

解决wcf发布后无法访问

一般是在安装 Windows Communication Foundation (WCF) 之后安装了 IIS造成,运行以上命令将在 IIS 中注册所需的脚本映射. 这时将确保在MIME中将 .svc 文件类型映射到 aspnet_isapi.dll. 运行cmd,输入: C:\Windows\Microsoft.NET\Framework\V4.0.30319\aspnet_regiis -i 注册成功后,重启一下iis, 理论上应可以解决导致404.17 not found 的大部分问题了

WCF发布方式介绍

转载出处:http://blog.csdn.net/fangxing80/article/details/6101790 从VS2005推出WCF以来,WCF逐步取代了Remoting, WebService成为.NET上分布式程序的主要技术.WCF统一的模型整合了以往的 WebService.Remoting.MSMQ 等技术,让分布式开发变得更加简单,方便,快捷. wcf_host_architecture (上图选自<Programming WCF Services>) WCF基本概念(

eclipse、eclipse_rcp工程发布前、eclipse_rcp工程发布后

接着上节说到的相对路径问题 eclipse的相对路径是相对于项目工程的路径:在这里可以直接使用Document doc = reader.read(new File("student.xml")); eclipse_rcp产品发布前的相对路径是相对于源码路径 InputStream in = MAC.class.getClassLoader().getResourceAsStream("student.xml"); Document doc = reader.rea

CocoStudio游戏发布后资源加密大致实现思路

截 止到目前,CocoStudio版本已经发展到1.5,各个子工具间也已经发生了巨大变化.但是,无论是动画编辑器,UI编辑器,场景编辑器还是 数据编辑器,它们生成(导出)的文件在商业开发中往往需要进行加密处理(当然,对于其中的一些部分加密也实在没有必要). 那么,版本发布时,如何对资源进行加密? 对此,以前官方没有给出任何回答.最近,我从cocoachina论坛上了解了几句,但是已经足够我们参考之用了.大致思路如下: NOTE: hanrea是cocoachina论坛中的一位高人,我有事经常与他

&alpha;发布后的感想(组长作业)

今天α发布后,组长作业,谈谈心得体会,谈谈哪些做的好的地方,哪些做的不好.耐撕团队组长因有事缺席,耐撕团队的α发布由齐同学来主持,所以这个作业由齐同学代理. 先谈谈耐撕团队在α发布会中齐同学认为做的好的地方吧:(傲娇状) 1.关于提前准备 说起提前准备,如果熟悉足球运动或篮球运动的同学一定知道,大部分的优秀运动员在比赛前都有"踩场地"的习惯,就是提前进比赛场地适应性热身.在α发布会之前,同样,耐撕团队的三名队员也提前30分钟来到了教室,提前30分钟的时间是齐同学提出的(此处窃喜状),原

code first网站发布后数据表中没有数据问题

code first网站发布后数据表中没有数据问题 (1).将internal sealed class Configuration类访问修饰符改为public  class Configuration : DbMigrationsConfiguration<SimpleNews.EntityModels.SimpleNewsContext> (2).在Global文件的Start()方法中加入下面一段代码 Database.SetInitializer( new MigrateDatabas

非80端口的网站发布后外网访问的问题

今天在公司服务器(Windows 2008 server)上部署了两个网站,非80端口,完事后发现在外网无法访问.关闭防火墙发现OK,但是我们并不希望关闭防火墙,于是google,baidu,找到了解决方案. 控制面板=>windows防火墙=>高级设置=>窗口左侧选择"入站规则",中间选择"Branchcache内容检索(HTTP-IN)",右侧选中"新建规则",在弹出窗口中选择"端口"一项,输入端口号,下

Xcode7的发布后的crash跟踪,轻松定位崩溃代码 Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS

Xcode7中苹果为我们增加了两个重要的debug相关功能.了解之后觉得非常实用,介绍给大家. 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误.苹果这次带来了革命性的提升. 在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目). 这样设置后,如果再出现类

Unity3d:编辑器中运行正常,发布后的exe提示找不到文件

解决方案1:查看文件路径拼写方式,如果是用"+"拼接的,请改用System.IO.Path.Combine()方式拼接.经过测试,两种拼接方式打印出来的路径是一样的,但为什么 加号 的方式拼接unity不识别,原因未知.希望知道 原因的大神回帖.Unity3d:编辑器中运行正常,发布后的exe提示找不到文件,布布扣,bubuko.com