2008-12-09 201 views
35
[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"; 
    } 

的問題值:http://Cyberindigo/TempWebService/InsertXML服務器無法識別的HTTP標頭SOAPAction的

回答

2

我有類似的問題。爲了調試問題,我運行了Wireshark並捕獲了我的代碼生成的請求。然後我使用XML Spy trial來創建一個SOAP請求(假設你有WSDL)並且比較這兩個。

這應該給你一個提示什麼錯了。

+3

其他可以用來做同樣事情的工具是Fiddler和/或SoapUI。 – 2010-10-12 22:44:19

+1

我用這個方法(Fiddler),發現我打了一個我的web服務的舊版本,它沒有包含我的新方法。我的Web.Config仍指向一箇舊的服務器。布萊什。 – Suamere 2014-06-16 19:17:24

58

這篇文章的下一部分的來源是:

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

(因爲OP不想給歸屬,並感謝Peter)

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


看到,因爲無處在互聯網上我能找到這樣的錯誤,我想我會分享我的長尋找這個bug的果實的解釋。

這意味着(至少在我的情況),您的訪問與SOAP Web服務和傳遞SOAPAction的參數不匹配什麼服務期待的HTTP請求。

因爲我們將Web服務從一臺服務器移動到另一臺服務器,因此我改變了調用C#文件中的「名稱空間」(不要混淆Web服務名稱空間和.net名稱空間)以匹配新的服務器。但服務器並不關心http // yournamespace.com/blah的實際網絡實際情況,它只關心你發送了你所說的你期望在服務器上的內容。它不關心是否有任何事物存在。

所以基本上,Web服務從http://foo.com/servicename移動到http://bar.com/servicename,但Web服務的「名稱空間」保持爲http://foo.com/ servicename,因爲沒有人改變它。

而這隻需要大約4個小時的工作!

如果你有類似的問題,但不能工作,我在這裏說什麼,隨意郵寄我的[email protected] - 我不希望任何人我的四個小時!

+1

我有一個類似的問題,其中Web Reference已經過時了服務。在Visual Studio中更新Web引用已將其清除。 – AlG 2011-12-07 13:07:17

+3

9年後,人們對此感到有趣。由於我的博客文章,我每個月都會收到幾封有關此郵件的電子郵件。感謝歸屬jcolebrand :) – 2012-04-23 18:42:19

6

我與山姆同意了SOAP定義不匹配的期望是什麼。這裏只是一個解決方案可能是,我不得不手動算出這個錯誤我自己:

我的問題是,我改變了Web方法的名稱,但在元數據標籤並沒有改變「MessageName」。

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

} 

應該

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

} 

希望幫助別人

0

我不得不整理一下我的服務參考市值,刪除引用,並重新將它們添加到解決這個問題。我不知道如果有這些步驟都是迷信的,但問題就走開了。

5

雖然調用的.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)  
    { 

     ...... 
    } 

} 

而calling.Sometime我們忽略大小寫的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> 
  • 命名空間不必是相同的服務。命名空間的託管URL可以是任意字符串。
  • 例如上述服務可在http://84.23.9.65/MyTestService託管,但仍同時從客戶端調用Web Service的名稱空間應該是其中的貢獻莫過於類是具有即http://MyDomain.com/TestService

    2

    我決定在這裏發表我自己的答案,因爲我已經失去了同在這幾小時內,我認爲,儘管接受的答案非常好,並指出我的方向是正確的(是的,它得到了一個投票),但它不夠詳細,不足以解釋我的應用程序出了什麼問題,至少在我的情況。

    我跑在OpenESB的2.2 BPEL模塊和我複合應用程序的測試案例,下面的錯誤是失敗:

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

    做一些研究之後,我已經注意到,外部WSDL具有所有線索我們需要解決這個問題,比如,我用下面的Web服務,通​​過Web服務的業務流程來驗證信用卡號碼: http://www.webservicex.net/CreditCard.asmx?WSDL

    如果檢查<wsdl:operation元素,你會清楚地看到它說明該o的soapAction peration:

    <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> 
    ... 
    

    但是,一旦你創建複合應用程序,並建立與調用這個外部WSDL服務,出於某些原因,BPEL項目(?BUG),複合應用程序服務組裝的XML(CASA)結合與空soapAction參數生成:

    <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)到這個參數,應用程序的測試案例將正確並返回預期的肥皂響應。

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

    所以,這是一個更具體的解決方案,我決定基於本博客文章中的信息記錄:http://bluebones.net/2003/07/server-did-not-recognize-http-header-soapaction/

    It means (at least in my case) that you are accessing a web service with SOAP and passing a SOAPAction parameter in the HTTP request that does not match what the service is expecting.

    1

    我在我的Web服務中從「tempuri」更改名稱空間後出現同樣的問題。

    您必須在使用上述服務的項目中更新服務引用,以便它可以獲取最新的SOAP定義。

    或者至少這對我有效。 :)

    1

    我們重命名了一些我們的webservice項目命名空間,並忘記使用重命名項目的命名空間更新網站httphandlers config部分。

    3

    我有同樣的問題,它修正了一些檢查後:

    < <目標WebService的存在,但調用的方法不是eXXXists。 >>

    my local service contain methods but target server(connecting server) does not contain specified called method.

    再次檢查你的程序的場景...

    0

    我也有類似的問題,同樣的錯誤信息:

    System.Web.Services.Protocols.SoapException:服務器不承認HTTP頭SOAPAction的價值:

    我們在我們的Web服務調用中使用動態URL。我們有一箇中央配置服務器,用於管理所有Web服務調用的位置,以便我們的代碼可以在DEV中運行,測試或生活,無需重新編譯。我們的配置服務器中針對測試環境的特定Web服務調用的URL不正確。 Web服務調用被髮送到錯誤的服務器和錯誤的Web服務。

    所以,這個錯誤可能只是Web服務請求與被調用的Web服務不匹配的結果。

    它在Web應用服務器上運行提琴手以查看實際調用的是不正確的Web服務。

    3

    只是爲了幫助別人對這個問題,調試了一下午之後,問題是,網絡服務與框架4.5開發,在Android通話必須SoapEnvelope.VER12而不是與SoapEnvelope.VER11

    完成
    1

    我的錯誤答案由約翰·桑德斯先生定: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/")] 
    

    ,所以我們在應用程序中引用(1)和Web服務(2)現在。

    使他們等於解決您的問題。

    0

    問題出在服務中的System.Web.Services.Protocols.SoapDocumentMethodAttribute 。請檢查一下。它可能會改變。

    0

    我有同樣的錯誤,我能夠通過刪除「Web引用」,並添加一個「服務引用」,而不是

    0

    我得到這個錯誤,解決它,當我試着打電話給並不存在的方法。它只存在於我們的web服務的更新版本中。

    相關問題