使用管理员以外的其他用户调用 WCF 服务时响应 400(错误请求)

Posted

技术标签:

【中文标题】使用管理员以外的其他用户调用 WCF 服务时响应 400(错误请求)【英文标题】:Response 400 (bad request) when invoking WCF service with other user than Administrator 【发布时间】:2013-05-24 20:48:29 【问题描述】:

我有一个简单的 WCF 服务(托管在 Server01 中),我一直在使用它,没有任何问题。在这个特定的服务器上安装后(我们称之为 ClientServer01),我开始得到响应 400。

所以我们有以下两个场景。

    从运行为 Administrator 的 myApp.exe 从 ClientServer01 调用 WCF 服务 - Works 从运行为 CustomUser 的 myApp.exe 从 ClientServer01 调用 WCF 服务 - 崩溃

附加数据:

ClientServer01 使用其网络内的代理进行通信

我可以使用 cmd 从 ClientServer01 ping Server01,同时以管理员和 CustomUser 身份运行

已经尝试按照here 的描述设置expect100Continue="false"

我已经制作了 MyApp.exe 来隔离问题并出于调试目的,真正的应用程序是 ClientServer01 中的 IIS 网站

服务没什么大不了的。带有 BasicHttpBinding 的非常基本的不安全 WCF 服务

在询问之前,我尝试用 fiddler 分析请求,它起作用了,因为真正发出请求的组件是 fiddler。今天我又试了一次,但是以 mycustom 用户身份运行 fiddler 这是输出:

错误

无法检索到请求的 URL


尝试检索 URL 时遇到以下错误: /MyServiceAppName/MyServiceName.svc

无效的网址

请求的 URL 的某些方面不正确。

一些可能的问题是:

• 缺少或不正确的访问协议(应该是“http://”或类似的)

• 缺少主机名

• URL 路径中的非法双转义

• 主机名中的非法字符;不允许使用下划线。

您的缓存管理员是网站管理员。


由 fw3.companyhostname.com.br 于 2013 年 5 月 27 日星期一 13:58:09 GMT 生成 (鱿鱼/3.1.11)

我是否遗漏了一些服务器、代理或 WCF 配置,这些配置允许 CustomUser 通过端口 80 向基本 WebService 发出 http 请求?

谢谢

【问题讨论】:

我最近遇到了类似的问题 - 不是说这是答案,而是要检查一下。您的客户端可能正在使用 IP6 进行通信,但该服务设置为仅在 IP4 上侦听。这是我的场景,我看到了 400 响应。 您应该在客户端和服务器上打开活动跟踪,并使用跟踪查看器查看发生了什么。一个快速的谷歌将向您展示 WCF 配置,msdn.microsoft.com/en-us/library/aa751795.aspx 将向您展示如何理解查看器工具。 在提出问题之前我已经跟踪了服务器端。客户端跟踪没有给我任何帮助细节,谢谢 【参考方案1】:

CustomUser 的代理未配置。所以UseDefaultWebProxy 会引用一个无效的代理。

这类问题有一些解决方案

    设置目标用户代理设置(最合适的 IMO) 设置绑定 ProxyAddress 属性 在 .config 文件标签中设置默认应用代理 configuration/system.net/defaultProxy/proxy <proxy proxyaddress="http://ip:port" />

【讨论】:

以上是关于使用管理员以外的其他用户调用 WCF 服务时响应 400(错误请求)的主要内容,如果未能解决你的问题,请参考以下文章

WCF 服务未在服务器以外的其他设备上运行

使用另一个用户名启动服务后,WCF 给出错误 10061

调用 WCF Web 服务时出现错误的 Json 响应

当 WCF 方法抛出异常时,使用空响应调用 jQuery 成功回调

WCF Web 服务调用的性能

如何验证和授权每个 WCF 调用?