web-dev-qa-db-ja.com

サーバーはHTTPヘッダー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ヘッダーSOAPActionの値を認識しませんでしたというエラーが発生する問題: http:// Cyber​​indigo/TempWebService/InsertXML

41
user42070

この投稿の次の部分のソースは次のとおりです。

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

(OPは帰属を表示したくなかったため、Peterに感謝します)

Bakertはテキストの元の著者であり、OPではないことに注意してください。


インターネット上のどこにも見当たらないので、このエラーの説明を見つけることができません。このバグを探し続けた結果を共有すると思いました。

(少なくとも私の場合)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時間で解決しました!

あなたが同様の問題を抱えているが、私がここで言っていることがうまくいかない場合は、bakert + web @ gmail.comで私にメールしてください-私は誰にも私の4時間を望みません!

63
user255762

私は、SOAPの定義が期待されるものと一致しないという点で、サムに同意します。

私の問題は、Webメソッドの名前を変更したが、メタデータタグの「MessageName」は変更しなかったことです。

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

}

そのはず

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

}

それが誰かを助けることを願っています

6
Ben

.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. 名前空間は、サービスのホストURLと同じである必要はありません。名前空間は任意の文字列にすることができます。

例えば上記のサービスは http://84.23.9.65/MyTestService でホストされますが、クライアントからWebサービスを呼び出す間、名前空間はサービスクラスが持っているものと同じでなければなりませんie http ://MyDomain.com/TestService

5

この問題について誰かを助けるために、午後のデバッグの後、問題はフレームワーク4.5でWebサービスが開発され、AndroidからではなくSoapEnvelope.VER12で呼び出す必要があることでした。 SoapEnvelope.VER11

3
Flavio Bianchi

私は同じ問題を抱えていましたが、いくつかのチェック後に修正されました:

<<ターゲットWebServiceは存在しますが、呼び出されたメソッドはeXXXistsではありません。>>

ローカルサービスにメソッドが含まれていますが、ターゲットサーバー(接続サーバー)に指定された呼び出されたメソッドが含まれていません。

プログラムシナリオをもう一度確認してください...

3
Zolfaghari

同様の問題がありました。問題をデバッグするために、 Wireshark を実行し、コードで生成されたリクエストをキャプチャしました。次に、 XML Spyトライアル を使用してSOAPリクエスト(WSDLがあると仮定))を作成し、これら2つを比較しました。

これにより、何がうまくいかないかのヒントが得られます。

2
ya23

私はこれで数時間を失ったので、ここに自分の答えを投稿することにしました。受け入れられた答えは非常によく、正しい方向を示しましたが(はい、投票を得ました)、少なくとも私の場合は、私のアプリケーションで何が間違っていたのかを説明できるほど詳細ではありません。

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要素は、その操作の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>
...

ただし、複合アプリケーションを作成し、この外部WSDLサービスを呼び出すBPELでプロジェクトをビルドすると、何らかの理由(バグ?)で、空の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応答が返されます。

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

したがって、このブログ投稿で見つけた情報に基づいて文書化することを決定した、より具体的なソリューションです。 http://bluebones.net/2003/07/server-did-not-recognize-http-header- soapaction /

(少なくとも私の場合)SOAPおよび)でWebサービスにアクセスし、HTTPリクエストで何と一致しないSOAPActionパラメーターを渡すことを意味しますサービスは期待しています

2
theMarceloR

Webサービスプロジェクトの名前空間の一部の名前を変更し、名前を変更したプロジェクトの名前空間でWebサイトのHTTPハンドラーの構成セクションを更新するのを忘れていました。

私はこれと同じ問題を抱えていましたが、解決策は、間違ったWebサービスを指していることでした。 Web参照を正しく更新しました。しかし、暗号化されたファイルにサービスのURlを保存し、暗号化された正しいサービスでファイルを更新しませんでした。

しかし、これらのすべての提案は、デバッグのためにどこに行くべきかを理解するのに本当に役立ちました。

ありがとう!

1
Sue

同じエラーが発生しました。「Web参照」を削除し、代わりに「サービス参照」を追加することで解決できました

1
Manikandan

Webサービスで名前空間を "tempuri"から変更した後、同じ問題が発生しました。

上記のサービスを使用しているプロジェクトのサービス参照を更新する必要があるため、最新のSOAP=定義を取得できます。

または、少なくともそれでうまくいきました。 :)

1
Ken

ジョン・サンダース氏の回答により修正された私のエラー: 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)になりました。

あなたの問題を解決するためにそれらを等しくします。

1
Zolfaghari

存在しないメソッドを呼び出そうとしたときにこのエラーが発生しました。ウェブサービスの新しいバージョンにのみ存在していました。

0
Cosmin

同じエラーメッセージで同様の問題が発生しました。

System.Web.Services.Protocols.SoapException:サーバーはHTTPヘッダーSOAPActionの値を認識しませんでした:

Webサービス呼び出しで動的URLを使用します。すべてのWebサービス呼び出しの場所を管理する中央構成サーバーがあり、コードを再コンパイルせずにDEV、テスト、またはライブで実行できます。構成サーバーでは、テスト環境の特定のWebサービス呼び出しのURLが正しくありませんでした。 Webサービス呼び出しは、間違ったサーバーと間違ったWebサービスに送信されていました。

そのため、このエラーは単に、呼び出されるWebサービスと一致しないWebサービス要求の結果である可能性があります。

Web Appサーバーでフィドラーを実行して、実際の呼び出しが誤ったWebサービスに対するものであることを確認しました。

0
Graeme Black

問題は、サービスのSystem.Web.Services.Protocols.SoapDocumentMethodAttributeにあります。これをチェックしてください。変更される場合があります。

0
Balamurugan

これを修正するには、サービス参照の大文字を整理し、参照を削除してから追加し直す必要がありました。これらの手順のいずれかが迷信的かどうかはわかりませんが、問題はなくなりました。

0
gaijintendo