私は、サードパーティのオープンソースサーバーソフトウェア、BonitasoftのワークフローエンジンでREST Webサービスを使用しています。これはApache上で実行されています。このソフトウェアは残念なことに、Webサービス呼び出しのいずれかのPOSTメソッドのみを許可します。REST HttpWebRequest GetResponseStream()エラー500
私は、Firefoxのポスターアドインを問題なく使用することができました。以下は、ユーティリティで使用された要求情報です:
- URL:http://internalserver/bonita-server-rest/API/queryDefinitionAPI/getLightProcesses
- ユーザー認証:ユーザ名、パスワード
- コンテンツタイプ:アプリケーション/ X-WWW-フォームオプション=ユーザー%3a100%2cpassword%3a100
この情報を使用してアドインを実行した後、私が探している情報を持つ応答が得られます。呼び出しに関連したエラーはなく、クライアントとサーバーのどちらにもエラーはありません。これは、Posterを通じてこの呼び出しを行うときにサーバーログに書き込まれる内容です。
10.0.5.1 - username [26/Apr/2012:16:06:24 -0600] "POST /bonita-server-rest/API/queryDefinitionAPI/getLightProcesses HTTP/1.1" 200 981091
すべてのシステムが使用されます。
今、このPosterユーティリティと同じことをするC#コンソールアプリケーションを作成しようとしています。私はそれが問題なくしかし、この方法は、私は次のエラーを取得する呼び出された後のGetResponse()メソッドに取得するアプリケーションを実行すると
// Create the URI Address
var address = new Uri(url);
// Create the web request
var request = WebRequest.Create(address) as HttpWebRequest;
// Set type to POST
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Credentials = new NetworkCredential("username", "password");
// Create the data we want to send
var data = HttpUtility.UrlEncode("options=user:100,password:100");
// Set the content length in the request headers
request.ContentLength = data;
// Write data
using (Stream postStream = request.GetRequestStream())
{
using (StreamWriter writeStream = new StreamWriter(postStream))
{
writeStream.Write(data);
}
}
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
Console.WriteLine(reader.ReadToEnd());
}
は(スタックトレースを切り捨て:以下は、私が働いている現在のテストコードです):
System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
次は、Apacheによって書き出されるログ情報です:もちろん
10.0.5.1 - - [26/Apr/2012:16:21:08 -0600] "POST /bonita-server-rest/API/queryDefinitionAPI/getLightProcesses HTTP/1.1" 401 1331172
10.0.5.1 - username [26/Apr/2012:16:21:08 -0600] "options%3duser%3a100%2cpassword%3a100POST /bonita-server-rest/API/queryDefinitionAPI/getLightProcesses HTTP/1.1" 500 1150384
最初に考えたサービスがFではないということですスタンドアロンクライアントがエラーなしでサービスを呼び出すことができるため、そうではないと判断されました。私は記事や質問がたくさん流れていますが、この問題を解決することはできません。回答を受け取ることに関して私が間違っていることがありますか?他のアイデア?
参考のために、私はGrails(sigh)とまったく同じサービスコールを行いましたが、エラーは発生していません。
は**更新** 1 私は追加することによって、401を排除しようとした:
request.PreAuthenticate = true;
しかし、これは私の問題を解決していませんでした。
**アップデート2 ** Iは、次のコードを使用して手動でヘッダを設定することによって、401を排除することができた:
byte[] authBytes = Encoding.UTF8.GetBytes("username:password".ToCharArray());
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);
I手動ポスター要求及びIにヘッダを追加確かに500エラーは受信しませんが、私が期待しているデータです。しかし、私はまだ.NETの実装を通じて500のエラーを受けています。
Apacheログの1行目は401(Unauthorized)エラーを示します。それは問題だろうか? –
タイトルに「C# - 」などのプレフィックスを付けないでください。それがタグのためのものです。 –
良い点、ジョンについては申し訳ありません。 –