Bonitasoft의 워크 플로 엔진 인 타사 오픈 소스 서버 소프트웨어에서 REST 웹 서비스를 사용하고 있습니다. 이것은 Apache에서 실행 중입니다. 이 소프트웨어는 불행히도 웹 서비스 호출에 대해서만 POST 메서드를 허용합니다.REST HttpWebRequest GetResponseStream() 오류 500
전화의 기본 사항을 테스트하기 위해 문제없이 Firefox 용 포스터 추가 기능을 사용할 수있었습니다.
- URL :http://internalserver/bonita-server-rest/API/queryDefinitionAPI/getLightProcesses
- 사용자 인증 : 사용자 이름, 암호
- 컨텐츠 유형 :을 application/x-www-form 다음은 유틸리티에서 사용되는 요청 정보는 다음 옵션 = 사용자 % 3a100 % 2cpassword % 3a100
이 정보로 추가 기능을 실행 한 후 찾고있는 정보가있는 응답을 받았습니다. 클라이언트 나 서버에서 호출과 관련된 오류는 없습니다. 이 메시지는 포스터를 통해 전화를 걸 때 서버 로그에 기록됩니다.
10.0.5.1 - username [26/Apr/2012:16:06:24 -0600] "POST /bonita-server-rest/API/queryDefinitionAPI/getLightProcesses HTTP/1.1" 200 981091
모든 시스템이 작동합니다.
이제이 포스터 유틸리티와 동일한 기능을 수행하는 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());
}
가 (스택 트레이스를 절단 : 다음은 내가 함께 일하고 현재 테스트 코드) : 물론
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 아닌 것을 :
System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
은 다음 아파치에 의해 기록 된 로그 정보입니다 제대로 작동하지만 독립 실행 형 클라이언트가 오류없이 서비스를 호출 할 수 있기 때문에 그렇지 않은 것으로 판명되었습니다. 기사 및 질문이 많지만이 문제를 해결할 수 없습니다. 응답을받는 것과 관련하여 내가 잘못하고있는 것이 있습니까? 다른 아이디어?
참고로이 서비스 콜을 Grails (한숨)와 똑같이 수행 했으므로 오류가 발생하지 않았습니다.
는 ** 업데이트 1 ** 나는를 추가하여 (401)을 제거하기 위해 시도 :
request.PreAuthenticate = true;
그러나 이것은 내 문제가 해결되지 않았다.
** 업데이트 2 ** 내가 수동으로 다음 코드를 사용하여 헤더를 설정하여 (401)을 제거 할 수 있었다 :
byte[] authBytes = Encoding.UTF8.GetBytes("username:password".ToCharArray());
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);
것은 내가 수동으로 포스터 요청 및 I에 헤더를 추가해야하기를 500 오류는 아니지만 예상 한 데이터를 수신합니다. 그러나 .NET 구현을 통해 여전히 500 오류가 발생합니다.
Apache 로그의 첫 번째 행은 401 (Unauthorized) 오류를 나타냅니다. 문제가 될 수 있을까요? –
제목 앞에 "C# -"등을 붙이지 마십시오. 그것이 바로 태그가있는 것입니다. –
요점은 유감 스럽다. –