如何设置soap请求对象为 application/soap+xml;charset=utf-8
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置soap请求对象为 application/soap+xml;charset=utf-8相关的知识,希望对你有一定的参考价值。
参考技术A 就是服务发生异常提示的意思是,本来这个请求应该响应一个soap的xml文件,现在返回的是html文件之所以不一样是因为服务发生异常返回了html异常提示页面,这是客户端就处理不了了
具体原因需要看实际的异常提示
线程ID:[0]- 消息:Apabi.USP.Thread.ProviderProcessor.run(): 线程执行操作时发生异常:响应消息的内容类型 text/html; charset=utf-8 与绑定(application/soap+xml; charset=utf-8)的内容类型不匹配。如果使用自定义编码器,请确保正确实现 IsContentTypeSupported 方法。响应的前 1024 个字节为:“<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>IIS 7.5 详细错误 - 500.19 - Internal Server Error</title>
<style type="text/css">
<!--
bodymargin:0;font-size:.7em;font-family:Verdana,Arial,Helvetica,sans-serif;background:#CBE1EF;
codemargin:0;color:#006600;font-size:1.1em;font-weight:bold;
.config_source codefont-size:.8em;color:#000000;
premargin:0;font-size:1.4em;word-wrap:break-word;
ul,olmargin:10px 0 10px 40px;
ul.first,ol.firstmargin-top:5px;
fieldsetpadding:0 15px 10px 15px;
.summary-container fieldsetpadding-bottom:5px;margin-top:4px;
legend.no-expand-allpadding:2px 15px 4px 10px;margin:0 0 0 -12px;
legendcolor:#333333;padding:4px 15px 4px 10px;margin:4px 0 8px -12px;_margin-top:0px;
border-top:1px solid #EDEDED;border-left:1px solid #EDEDED;border-right:1px solid #969696;
border-bottom:1px solid #969696;background:#E7ECF0;font-weight:bold;fo”。
Server stack trace:
在 System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding)
在 System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
在 System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)本回答被提问者采纳
Soap 错误:“服务器无法处理请求”“对象引用未设置为对象的实例”
【中文标题】Soap 错误:“服务器无法处理请求”“对象引用未设置为对象的实例”【英文标题】:Soap Error: "Server was unable to process request" "Object reference not set to an instance of an object" 【发布时间】:2011-03-15 14:21:32 【问题描述】:当我在本地向 IIS 中的服务发送 SOAP 请求时,一切正常。 当我向在另一台主机上的 IIS 上运行的同一服务发送 SOAP 请求时,一切正常。
但是当另一个程序员向我的服务发送一个 SOAP 请求时,他通常会得到正确的响应,除了服务中返回的一个方法:
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Server was unable to process request. ---> Object reference not set to an instance of an object.</faultstring>
<detail />
</soap:Fault>
我需要了解他为什么会收到此错误。
他的 SOAP 请求与 SOAP 请求完全相同,但我的有效,而他的无效。
【问题讨论】:
所以当你捕获他的soap请求并将那个确切的请求(使用soapUI之类的soap工具)发送到你的开发环境时,它可以工作吗?因为听起来确实应该存在差异。 程序员在请求中的至少一个参数中省略/输入了错误类型的值。询问他的代码。 在我的情况下,发生此错误是因为没有格式化请求 xml。例如在请求 xml 中,如果需要标记如果您不知道错误发生的确切位置,则“对象引用”错误是最难解决的。一定要测试空值,因为这个错误最明显的原因是一个对象没有被初始化或者一个变量有一个空值,而它应该包含一个对象或一个值。
此外,请确保您遵循错误处理的最佳做法。尝试在尽可能早的级别捕获错误,除非您有意让更高级别的错误处理程序捕获错误。您收到此错误的事实意味着错误处理是不够的。
最后,我强烈建议为您的错误处理程序添加某种日志记录机制。将错误保存到事件日志或数据库,甚至通过电子邮件发送它们 - 任何东西,这样您就可以准确地知道错误在哪里。 Do NOT display the error back to the user。
对此有多种选择。 Asp.Net Health Monitoring 在 Web 服务和标准 asp.net 站点中运行良好。还有ELMAH,也可以自己写代码来实现。
如果您遵循这些准则,您将不会处于不了解错误是如何发生的情况。您将获得正确排除故障所需的信息,并且您的应用程序将更加可靠。
【讨论】:
【参考方案2】:感谢大家的帮助。我解决了这个问题。
soap 请求中的“SoapAction”字段的 URI 有误
我建议使用 HTTP 嗅探器。 http 嗅探器将显示 SOAP 属性。
“SOAPAction”属性应该类似于:http://tempuri.org/YourServiceMethodName
【讨论】:
这是您的链接:404 - 找不到文件或目录。 @Rodniko以上是关于如何设置soap请求对象为 application/soap+xml;charset=utf-8的主要内容,如果未能解决你的问题,请参考以下文章
NODEJS / PHP WSDL SOAP:未将对象引用设置为对象的实例
C#能否 设置 WebService 中SOAP 请求的Head 吗