码迷,mamicode.com
首页 > Web开发 > 详细

Using Request Headers for Metadata Address

时间:2016-08-20 17:48:30      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

问题描述

我将一个在本地调试正常的service部署到服务器后遇到了添加服务引用失败的问题。
在把配置文件中基址使用的localhost替换成服务器的ip地址后问题得到了解决。
但我感觉这并不是一个因为粗心写错地址产生的问题,真正的原因可能没有这么简单。

分析

在添加服务引用时需要填写服务的元数据地址,然后点Go按钮。
它出错的时候可能是这个样子:

技术分享
也可能是这个样子:

技术分享
我们来研究一下它们为什么失败了。
在浏览器中打开对应的地址可以看到:

技术分享

还有

技术分享
页面上有些链接的地址是基于localhost的,也就是配置文件里设的基址。
前面的错误提示也主要集中在无法获取到localhost上的数据,而这些数据按理说应该是从服务器来获取的。
这就是问题的原因——由HTTP-GET自动生成的元数据使用了配置里服务的基址。
所以当我把配置文件中基址使用的localhost替换成服务器的ip地址后问题就解决了。

解决方案

虽然在基址中直接使用ip的方法是有效的,但是,很别扭,对吧。
因为我们可能通过ip、主机名、域名等很多种方式访问服务,而且服务可能是部署在内网的一台主机上。
这么多复杂的情况我们该怎么办呢?
其实WCF已经为我们想好了,只要在配置中打开<useRequestHeadersForMetadataAddress>开关,来:
Enables the retrieval of metadata address information from the request message headers.

1 <behaviors>
2   <serviceBehaviors>
3     <behavior>
4       <serviceMetadata httpGetEnabled="true" />
5       <useRequestHeadersForMetadataAddress />
6     </behavior>
7   </serviceBehaviors>
8 </behaviors>

 

参考

http://stackoverflow.com/questions/5007270/how-to-change-wsdl-url-from-internal-machine-name-to-public
http://zamd.net/wcf/2010/01/14/using-request-headers-for-metadata-address.html
https://msdn.microsoft.com/en-us/library/ee816894(v=vs.110).aspx

 

Using Request Headers for Metadata Address

标签:

原文地址:http://www.cnblogs.com/LikeVirgo/p/Using-Request-Headers-for-Metadata-Address.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!