【问题标题】:WCF in "service reference" client gives less information in exception message than "web reference" client“服务参考”客户端中的 WCF 在异常消息中提供的信息少于“Web 参考”客户端
【发布时间】:2017-07-02 18:37:55
【问题描述】:

我应该在我的 C# 应用程序中调用 Web 服务。 当我在 Visual Studio 中添加服务引用以使用该服务时,在异常情况下我收到以下消息:

SOAP 消息传递需要 HTTP Content-Type 标头,并且没有 找到了。

但是,当我添加网络参考时,消息更加丰富且易于理解问题。此消息的最后一部分是服务生成的业务错误消息。我为该服务提供了一个无效的身份验证令牌参数,因此返回此错误消息:

客户端发现响应内容类型为 '',但预期为 'text/xml'。

请求失败并显示错误消息:

--

WEB 服务错误:UNAUTHENTICATED_ACCESS

我更喜欢使用“服务参考”方法,但现在我有疑问。 有没有办法改善这种异常或使用“服务参考”记录原始响应?

【问题讨论】:

  • 第二条消息不清楚,它告诉您标头是空的,但很可能它可能丢失了,并且实际上报告了一个身份验证错误,这只会使水变得混乱。

标签: c# web-services wcf service-reference web-reference


【解决方案1】:

我认为第一条信息要清晰得多。

它准确地告诉您问题出在哪里,即服务响应中缺少 HTTP Content-Type 标头。虽然此标头不是强制性的,但 HTTP 规范说您应该使用它(来自 here):

任何包含实体主体的 HTTP/1.1 消息都应该包含一个 定义该主体的媒体类型的 Content-Type 标头字段。

Microsoft 显然在他们的代理生成工具中内置了该标头将始终存在的假设。

不,您不应该使用 WebReference。它来自 .net 1.1

【讨论】:

  • 谢谢@tom。我部分同意您的观点,但我无法更改服务,并且它的响应包含有用的消息:WEB SERVICE ERROR : UNAUTHENTICATED_ACCESS
  • @morteza 这不是一条有用的消息。问题不在于身份验证。问题是该服务不符合 w3 指南。
  • 我明白了。这里听起来是个误会。此消息是服务生成的业务错误消息。我为该服务提供了一个无效的身份验证令牌参数,因此返回了此错误消息。
  • @Morteza 您应该将此信息添加到您的问题中,因为它是相关的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2020-07-08
相关资源
最近更新 更多