2

私は ac# の「クライアント」と Java の「サーバー」を持っています。Java サーバーには、クライアントに提供する wsdl があります。これまでのところ、c# がサーバーに SOAP アクションを実行するように要求することは機能します。私のサーバーは、soap リクエストを取得してメソッドを実行し、結果をクライアントに返そうとします。

ただし、C# に応答を送信すると、「サーバーがプロトコル違反をコミットしました。Section=ResponseStatusLine」が表示されます。

私はこれを修正するために一日中費やしましたが、うまくいくものは何も思いつきませんでした. 私が何をしたかを説明すると、この記事は非常に長くなってしまうので、簡単に説明します。

私は何時間もグーグルで検索しましたが、すべてが私の「応答行」が正しいことを示しています。Skypeをシャットダウンしたり、応答ラインを再配置したり、何かを追加したり、削除したりなどを試みましたが、すべて役に立ちませんでした。

これはクラスの課題のためなので、API を使用して支援することはできません。サーバー側ですべてを手動で行う必要があります。つまり、手動で解析し、soap 応答と http 応答を手動で作成します。私のためにそれを行うものを使うと言う前に、それを知りたいと思っただけです.

サーバーが返すものを確認できるように、c# クライアントを「模倣」した Java クライアントを作成して、サーバーが正しいヘッダーを送信していることを確認することさえ試みました。ただし、送信するように言ったものを正確に返しています。

Javaクライアントに同じことをするように指示しようとしましたが、実際に実行されているC#サービスに対して、実際のサービスが返すものを確認しましたが、基本的に同じことが返されました。安全のために、応答をコピーしてC#クライアントに送信しようとしましたが、それでもエラーがスローされました。

誰でも助けることができますか?アプリの構成に useUnsafeHeaderParsing を追加するなど、考えられることはすべて試しました。しかし、何も機能していません。実際のサービスが送信するものとまったく同じものを送信すると、怒鳴られます。私が欲しいものを送ると、それは叫びます。

私はこれを送ります:

"200 OK HTTP/1.0\r\n" +
"Content-Length: 201\r\n" +
"Cache-Control: private\r\n" +
"Content-Type: text/xml; charset=utf-8\r\n\r\n";
4

1 に答える 1

4

エラーの理由は、ステータス ラインの構文が間違っているためです。RFC によると、ステータス行の構文は次のとおりです。

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

応答ステータス行の一部が間違った方向に表示されています...エラーメッセージが示しているように!


いくつかのアドバイス:

  • このレベルで HTTP や SOAP について話そうとしないでください。これらのプロトコルは複雑であり、この種のことを行う適切に実装された適切なドキュメント ライブラリが存在します。それらを使用して、車輪の再発明に時間を無駄にしないでください。

  • 本当に自分でこれを実装したい、または実装する必要がある場合は、関連する仕様を読んで理解することが重要です。それらは、Google を使用して簡単に見つけることができます。

(リンクを提供するつもりはありません。四角い車輪を備えた馬車に相当するソフトウェアを構築するのに時間を浪費することを助長するだけだからです。当然のことながら、それらを自分で見つけて使用することを学ぶ必要があるためです。 .)

于 2012-06-09T02:06:17.437 に答える