Using Request Headers for Metadata Address
问题描述
我将一个在本地调试正常的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.
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<useRequestHeadersForMetadataAddress />
</behavior>
</serviceBehaviors>
</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的更多相关文章
- 不要直接对Request.Headers["If-Modified-Since"]使用Convert.ToDateTime
不要直接对Request.Headers["If-Modified-Since"]使用Convert.ToDateTime 前一段时间图片处理服务一直报“System.Format ...
- Retrofit2.0+OkHttp设置统一的请求头(request headers)
有时候要求Retrofit2的接口中每个都要增加上headers,又不想做重复的事情,可以使用这种方法来为每个request请求都设置上相同的请求头header. 修改请求头request heade ...
- HTTP响应头信息(Response Headers)与请求头信息(Request Headers)
打开了电影天堂网站,我们鼠标右键“检查”->打开“开发者工具”->选择“Network”. 刷新网页,选择某一文件点击(此处我是点击db.css),可以观察到Response Header ...
- 请求头(request headers)和响应头(response headers)解析
*****************请求头(request headers)***************** POST /user/signin HTTP/1.1 --请求方式 文件名 http ...
- 问题:request.Headers;结果:HttpWebRequest.Headers 属性
指定构成 HTTP 标头的名称/值对的集合. Headers 集合包含与请求关联的协议标头.下表列出了由系统或由属性或方法设置但未存储在 Headers 中的 HTTP 标头. 标头 设置方 Ac ...
- .NET Core 中读取 Request.Headers 的姿势
Request.Headers 的类型是 IHeaderDictionary 接口,对应的实现类是 HeaderDictionary ,C# 实现源码见 HeaderDictionary.cs . H ...
- 直接复制浏览器Request headers中的进行copyheaders进行转换
先导入函数库 from copyheaders import headers_raw_to_dict 然后复制请求头 headers = b'''accept: application/json, t ...
- HTTP请求协议中请求报文(Request Headers)跟响应报文(Response Headers)的简单理解
背景 今儿个一新来的应届生问我,开发模式中所看到的web请求的请求头里的属性怎么理解,我便根据自己的经验随便拉开一个请求跟他聊了起来,顺便自己记录下文字版,以后再有交流直接发地址给他就好了,嘻嘻,机智 ...
- Python 接口之request ,headers格式不对
复制heardes格式,模拟请求报错 原因:粗心,headers带了空格
随机推荐
- 怎样用jQuery拿到select中被选中的option的值
1.首先要保证select中每一个option标签都有value属性: 2.jquery的写法 1 $('#sele').val()//这里假设select的id是sele,这样可以获取当前选中的op ...
- 技术串讲 CAS 有用
CAS,全称为Compare and Swap,即比较-替换.假设有三个操作数:内存值V.旧的预期值A.要修改的值B,当且仅当预期值A和内存值V相同时,才会将内存值修改为B并返回true,否则什么都不 ...
- c++ std::unordered_set
std::unordered_set template < class Key, // unordered_set::key_type/value_type class Hash = hash& ...
- 抓包工具Fidder移动端HTTP请求抓包详解
第一步:下载神器Fiddler,下载链接: http://fiddler2.com/get-fiddler 下载完成之后,傻瓜式的安装一下了! 第二步:设置Fiddler打开Fiddler, ...
- JMeter下载及安装配置完整版
特别需要注意的时,jdk版本和jmeter版本匹配问题. Jdk1.8对应apache-jmeter-3.3 Jmeter下载及安装配置 本文是在win7环境下安装使用jmeter,jmeter可以运 ...
- 8、技术分析fastJson使用
一.导入包 二.使用 package com.itheima.test; import java.util.ArrayList; import java.util.List; import org.j ...
- code1169 传纸条
来自:http://www.cnblogs.com/DSChan/p/4862019.html 题目说找来回两条不相交路径,其实也可以等价为从(1,1)到(n,m)的两条不相交路径. 如果是只找一条, ...
- PLSA算法(转)
文章分类:综合技术 1. 引子 Bag-of-Words 模型是NLP和IR领域中的一个基本假设.在这个模型中,一个文档(document)被表示为一组单词(word/term)的无序组合,而忽略了语 ...
- 【转载】mysql中timestamp,datetime,int类型的区别与优劣
转载来自souldak,微博:@evagle以下内容整合筛选自互联网: int1. 占用4个字节2. 建立索引之后,查询速度快3. 条件范围搜索可以使用使用between4. 不能使用mysql提供的 ...
- Android Studio NDK环境配置
本文参考:Android Studio NDK环境配置及JNI使用方法:http://blog.csdn.net/tongseng/article/details/53005123 并添加自己的实践: ...