服务器不能识别HTTP Header SOAPAction的值

[SoapRpcMethod(Action = "http://cyberindigo/TempWebService/InsertXML", RequestNamespace = "http://cyberindigo/TempWebService/Request", RequestElementName = "InsertXMLRequest", ResponseNamespace = "http://cyberindigo/TempWebService/Response", ResponseElementName = "InsertXMLResponse", Use = System.Web.Services.Description.SoapBindingUse.Literal)] [WebMethod] public string InsertXML(string Jobs) { return "Hi"; } 

当我使用XMLHttpRequest访问它时出现以下错误:服务器无法识别HTTP Header SOAPAction的值: http:// Cyber​​indigo / TempWebService / InsertXML

这篇文章的下一部分的来源是:

http://bluebones.net/2003/07/server-did-not-recognize-http-header-soapaction/

(因为OP不想给出归属感谢Peter)

请注意,bakert是文本的原始作者,而不是OP。


在互联网上看不到任何地方,我可以find这个错误的解释,我想我会分享我长期search这个错误的成果。

这意味着(至less在我的情况下)您正在使用SOAP访问Web服务,并在HTTP请求中传递与该服务所期望的不匹配的SOAPAction参数。

因为我们把一个Web服务从一个服务器移到另一个服务器,所以我改变了调用C#文件中的“命名空间”(不要混淆networking服务命名空间和.net命名空间)以匹配新的服务器。 但服务器不关心http // yournamespace.com/blah的实际networking现实,它只关心你发送你所说的你期望在服务器上。 它并不在乎是否有任何东西。

所以基本上,Web服务从http://foo.com/servicename移动到http://bar.com/servicename,但Web服务的“名称空间”保留为http://foo.com/servicename,因为没有人改变它。

而这只需要大约4个小时的工作!

如果你有类似的问题,但不能工作,我在这里说什么,请随时给我发电子邮件bakert+web@gmail.com – 我不希望我的四个小时在任何人!

我同意Sam的意见,SOAP定义与预期不符。 这可能只是一个解决scheme,我不得不手动为自己找出这个错误:

我的问题是我改变了web方法的名字,但没有改变元数据标签中的“MessageName”。

 [WebMethod(MessageName = "foo")] public string bar() { } 

它应该是

 [WebMethod(MessageName = "foo")] public string foo() { } 

希望帮助别人

在调用.asmx / wcf Web服务时请注意以下几点:

  1. 命名空间区分大小写,SOAP请求必须与声明WebService的同一个命名空间一起发送。

例如对于如下所示的WebService

 [WebService(Namespace = "http://MyDomain.com/TestService")] public class FooClass : System.Web.Services.WebService { [WebMethod] public bool Foo( string name) { ...... } } 

在调用时,SOAP请求必须为名称空间维护相同的大小写。有时,我们会忽略区分大小写。

 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Foo xmlns="http://MyDomain.com/TestService"> <name>string</name> </Foo> </soap:Body> </soap:Envelope> 
  1. 名称空间不必与服务的托pipeURL相同。名称空间可以是任何string。

例如,Above服务可以在http://84.23.9.65/MyTestService上托pipe,但是在从客户端调用Web服务时,名字空间应该与serice类所具有的相同,即http://MyDomain.com/TestService

我有同样的问题,它经过一些检查后固定:

<< Target WebService存在,但被称为方法不是eXXXist。 >>

我的本地服务包含方法,但目标服务器(连接服务器)不包含指定的调用方法。

再次检查你的程序场景…

为了解决这个问题,经过一个下午的debugging,问题是web服务是用framework 4.5开发的,android的调用必须用SoapEnvelope.VER12完成,而不是用SoapEnvelope.VER11

我有类似的问题。 为了debugging这个问题,我运行了Wireshark并捕获了我的代码生成的请求。 然后我使用XML Spy试验来创build一个SOAP请求(假设你有WSDL)并且比较这两个。

这应该给你一个提示什么错了。

我决定在这里发表我自己的答案,因为我已经在这方面损失了几个小时了,我认为,虽然接受的答案非常好,并指出我在正确的方向(是的,它得到了一个投票),这是不够详细,不足以解释我的应用程序出了什么问题,至less在我的情况下。

我在OpenESB 2.2中运行BPEL模块,我的复合应用程序的testing用例失败,出现以下错误:

 Caused by: System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: . 

在做了一些研究之后,我注意到外部WSDL有我们需要解决这个问题的所有线索,例如,我使用以下Web服务通过Web服务编排来validation信用卡号: http:// http://www.webservicex.net/CreditCard.asmx?WSDL

如果您检查<wsdl:operation元素,您将看到它明确指出该操作的soapAction

 <wsdl:binding name="CCCheckerSoap" type="tns:CCCheckerSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="ValidateCardNumber"> <soap:operation soapAction="http://www.webservicex.net/ValidateCardNumber" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> ... 

但是,一旦创build组合应用程序并使用调用此外部WSDL服务的BPEL构build项目,出于某种原因(错误?),将使用一个空的soapAction参数生成组合应用程序服务组合(CASA)绑定的XML:

 <binding name="casaBinding1" type="ns:CCCheckerSoap"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="ValidateCardNumber"> <soap:operation soapAction="" style="document"/> <input> <soap:body use="literal"/> </input> 

一旦您将正确的soapAction(http://www.webservicex.net/ValidateCardNumber)复制到此参数中,应用程序的testing用例将正确并返回预期的Soap响应。;

 <soap:operation soapAction="http://www.webservicex.net/ValidateCardNumber" style="document"/> 

所以,这是一个更具体的解决scheme,我决定根据这篇博客中的信息进行文档化: http : //bluebones.net/2003/07/server-did-not-recognize-http-header-soapaction/ 。

这意味着(至less在我的情况下)您正在使用SOAP访问Web服务,并在HTTP请求中传递与该服务所期望的不匹配的SOAPAction参数

从Web服务中的“tempuri”更改命名空间后,我遇到了同样的问题。

您必须在使用上述服务的项目中更新服务引用,以便获取最新的SOAP定义。

或者至less为我工作。 🙂

我们重命名了一些我们的web服务项目命名空间,并忘记更新网站httphandlers config部分与重命名的项目的命名空间。

我的错误通过回答约翰·桑德斯先生解决: http : //forums.asp.net/post/2906487.aspx

简而言之:ws .asmx.cs的命名空间与ws .wsdl文件的区别。

 1) [WebService(Namespace = "http://tempuri.org/")] 

后来的Web服务名称空间更改为:

 2) [WebService(Namespace = "http://newvalue.com/")] 

所以我们在应用程序和Web服务中引用(1)是(2)。

让他们等于解决你的问题。

我不得不整理我的服务引用大写,删除引用,并重新添加它们来解决这个问题。 我不确定这些步骤是否是迷信的,但问题就消失了。

我有一个类似的问题与相同的错误消息:

System.Web.Services.Protocols.SoapException:服务器无法识别HTTP Header SOAPAction的值:

我们在我们的Web服务调用中使用dynamicURL。 我们有一个中央configuration服务器,pipe理所有Web服务调用的位置,以便我们的代码可以在DEV中运行,testing或生活,无需重新编译。 我们的configuration服务器中针对testing环境的特定Web服务调用的URL不正确。 Web服务调用被发送到错误的服务器和错误的Web服务。

所以这个错误可能只是Web服务请求与被调用的Web服务不匹配的结果。

在Web App服务器上运行提琴手,看到实际的调用是对不正确的Web服务。

问题是在服务中的System.Web.Services.Protocols.SoapDocumentMethodAttribute。 请检查一下。 它可能会改变。

我有同样的错误,我能够通过删除“Web引用”,并添加一个“服务引用”来解决它

当我试图调用一个不存在的方法时,我得到了这个错误。 它只存在于我们的webservice的新版本。