首页 新闻 会员 周边 捐助

服务器提交了协议冲突 Section=ResponseStatusLine

0
悬赏园豆:5 [已解决问题] 解决于 2015-04-07 14:33

在WCF学习过程中遇到这个问题,网上都说在客户端添加如下代码:

<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true"/>
</settings>
</system.net>

可是还是不是很管用,请问有较好的解决方法吗?

Freedom0619的主页 Freedom0619 | 初学一级 | 园豆:10
提问于:2015-04-02 13:38
< >
分享
最佳答案
0

在你的服务器的 web.config 中添加

收获园豆:5
Launcher | 高人七级 |园豆:45050 | 2015-04-02 16:00

@Freedom0619: 把你的解决方案描述一遍,我现在还不知道你弄了个什么东西,以及如何就产生了这个错误

Launcher | 园豆:45050 (高人七级) | 2015-04-02 16:03

@Freedom0619: 你使用了 wsHttpBinding,URI 应该使用 HTTPS。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 16:14

@Freedom0619: 从你给的 wsdl 的截图看,你的服务配置实用了 wsHttpBinding,因此一定要求使用 HTTPS。你把服务端的 WCF 的配置贴出来。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 16:43

@Freedom0619: 你的服务用了 WSHttpBinding,那么服务的地址一定要是 HTTPS 的,而且默认的话,应该是 Windows 身份认证(从你的自动生成的客户端配置文件中也可以看出来:<identity>
                    <userPrincipalName value="lu.yy@cn1.global.ctrip.com" />
                </identity>),我不知道这是不是你想要的。

 

我建议你在服务端通过配置文件的形式来配置你的服务,不要通过代码来修改。而且没有特殊需求的话,请使用 IIS 宿主服务。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 16:54

@Freedom0619: 按照他的代码,默认是 Message 安全和 Windows 身份认证(要求服务端和客户端机器在同一域中),你在部署服务的机器上通过添加服务引用(避免不同域的问题),然后把自动生成的配置文件贴出来。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 17:09

@Freedom0619: 全改成 BasicHttpBinding 是没有问题的。生成的配置文件也没问题,你得在同域或者同一台机器去生成,然后贴出来。主要是安全配置部分导致了你目前的问题。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 17:27

@Freedom0619: 能,在同一域或机器上做这个操作,然后把自动生成的配置贴出来。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 17:45

@Freedom0619: 服务部署在机器 A,客户端项目也在 A 机器,然后添加服务引用

Launcher | 园豆:45050 (高人七级) | 2015-04-02 17:51

@Freedom0619: http://blog.csdn.net/hcqi2004/article/details/7299525

按照这篇文章写示例程序,然后在你本机测试,把添加服务引用后的自动生成的配置信息给贴出来。—— 这下你能看明白了吗?

Launcher | 园豆:45050 (高人七级) | 2015-04-02 17:57

@Freedom0619: 你的服务是部署在 127.0.0.1:8960(本机)的吗?

 <identity>
          <userPrincipalName value="lu.yy@cn1.global.ctrip.com" />
        </identity>

 

这个自动生成的配置有问题,删掉。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 18:16

@Freedom0619: 保证你的服务和客户端的 wsHttpBinding 中的 security 设置是这样:

<security mode="Message">
            <message clientCredentialType="Windows"
                     negotiateServiceCredential="true"
                     algorithmSuite="Default"
                     establishSecurityContext="true" />
          </security>

然后同一台机器里运行服务端和客户端,或者同一个 Windows 域(不知道啥叫域,就自己去百度下)中。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 18:20

@Freedom0619: 请问一下,Uri("http://127.0.0.1:8960/ComputeEngineservice/metadata");这个url地址是自己任意选定的吗?这个URL地址要本机吗?这个问题我一直没搞清楚

你给个电话,我打打电话给你讲,我不是在这里写书的。

Launcher | 园豆:45050 (高人七级) | 2015-04-02 18:26
其他回答(2)
0

把客户端的keepAlive选项关掉。

bulusli | 园豆:331 (菜鸟二级) | 2015-04-02 15:06

@Freedom0619: 配置文件里有个属性。你找找。

支持(0) 反对(0) bulusli | 园豆:331 (菜鸟二级) | 2015-04-02 15:17

@Freedom0619: 兄弟,建议你从代码入手吧,报这个错是因为你的http头中有一些不合法的字符,比如空格之类的,你可以找找http请求的那个地方看url是否是规范的。

支持(0) 反对(0) bulusli | 园豆:331 (菜鸟二级) | 2015-04-02 15:37
0

错误解决了吗? 以前做数据采集的时候遇到过,发送httpWebRequest,config里添加 useUnsafeHeaderParsing="true" 压根儿没用。 后来发现是对方网站response-header的content-length跟实际response-body的length不一致导致 .net抛出此异常。

码尔代夫iimax | 园豆:3138 (老鸟四级) | 2015-04-03 14:06

@Freedom0619: 没玩WCF。 我的回答只是提了一个方向

支持(0) 反对(0) 码尔代夫iimax | 园豆:3138 (老鸟四级) | 2015-04-08 13:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册