요약어떻게 어떻게 웹 서비스 내에있는 HttpContext를 작성하기 위해 HTTPHandler.ashx 파일
에에 WebMethod POST를 하는가? 또는 POST 웹 서비스에서 Handler.ashx?
배경
나는 폼 인증하지만 어떻게 든이 스크립트를 사용하여 Windows 인증을 달성 사용하는 콜드 퓨전 (Cold Fusion) 웹 응용 프로그램이 있습니다
<cfscript>
ws = CreateObject("webservice", "#qTrim.webServiceName#");
ws.setUsername("#qTrim.trimAcct#");
ws.setPassword("#qTrim.trimpwd#");
wsString=ws.UploadFileCF("#qTrim.webserviceurl#","#objBinaryData#", "#qFiles.Filename#", "Document", "#MetaData#");
</cfscript>
- 는 분명히, setUsername이/SETPASSWORD지도 값을 단일 Windows 도메인 계정에 연결하면 프로덕션 환경에서 작동합니다. (webservice는 C#으로 작성되었으며 .Net 4.0으로 작성되었으며이 도메인 계정에서 사용해야합니다.)
- 이 도메인 계정으로 실행중인 프로세스에서 POST 할 때 작동하는 DownloadHandler.ashx를 개발했습니다. PostBackUrl = "~/DownloadHandler.ashx"를 정의하는 버튼이있는 .Net 웹 클라이언트가 있어야합니다. 이 HTTPHandler는 HTTPContext에서 몇 가지 항목을 잡고 문제없이 위의 웹 서비스 메서드 DownloadFile을 호출합니다.
내 문제 지금이 ColdFusion에서 응용 프로그램이 웹 서비스를 사용하여 파일을 다운로드해야합니다. CF 코드가 HTML 형식을 DownloadHandler.ashx에 게시 할 때 작동하지만 - CF 테스터가이 Windows 도메인 계정을 사용하는 경우에만 작동합니다. CF 응용 프로그램은 양식 인증을 통해 원격 익명 사용자를 지원하기 때문에 프로덕션에서는 작동하지 않습니다.
질문
ColdFusion에서 나 자신, 나는 다음과 같은 변화의 생각을 알고하지 :
사용자/PSWD가 동일하게 설정하고 CF가 호출이 될 수 있도록 위의 CF 기술을 복제를 ws.DownloadFile 메서드를 직접 사용하십시오
내 웹 서비스에서 현재 HTTPHandler 코드를 대부분 사용해야한다고 생각하지만 출력 처리 방법을 생각할 수 없습니다 . 이 핸들러가 POST 될 때 OPEN 또는 저장을 요구하고 멋지게 작동하지만 웹 서비스 자체에서 이것을 어떻게 스트리밍 할 것인지 혼란 스럽습니다.
현재 DownloadFile의의 WebMethod는 데이터베이스 제품과 통신이 (현재) 핸들러에 출력을 반환 : IIS 및하지에서 실행되는
코드
namespace WebClient
{
public class DownloadHandler : IHttpHandler
{
ASMXproxy.FileService brokerService;
public void ProcessRequest(HttpContext context)
{
brokerService = new ASMXproxy.FileService();
string recNumber = context.Request.Form["txtRecordNumber"];
brokerService.Url = context.Request.Form["txtURL"];
string trimURL = context.Request.Form["txtFakeURLParm"]; // not a real URL but parms to connect to TRIM
brokerService.Timeout = 9999999;
brokerService.Credentials = System.Net.CredentialCache.DefaultCredentials;
byte[] docContent;
string fileType;
string fileName;
string msgInfo = brokerService.DownloadFile(trimURL, recNumber, out docContent, out fileType, out fileName);
string ContentType = MIMEType.MimeType(fileType);
context.Response.AppendHeader("Content-Length", docContent.Length.ToString());
context.Response.AppendHeader("content-disposition", "attachment; filename=\"" + fileName + "\"");
context.Response.ContentType = ContentType;
context.Response.OutputStream.Write(docContent, 0, docContent.Length);
context.Response.OutputStream.Flush();
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
시도 여러 번 있지만, 제대로이 게시물의 끝 부분에 코드를 포맷하는 방법을 알아낼 수 없었다. –
@ 단 짧음 - 코드 서식을 수정 해 주셔서 감사합니다. 트릭이란 무엇입니까? INSERT CODE 기호를 클릭하고 파란색 삽입 지점 위에 코드를 붙여 넣은 다음 모든 코드 줄이 4 개 이상의 들여 쓰기를했는지 확인했습니다. 또한 문자열 상수 내에 HTML 꺽쇠 괄호가있는 일부 줄을 제거했습니다. –
그것은 Markoff라는 구피라고 생각합니다. 마지막 글 머리 기호와 코드 시작 사이에 "code"라는 단어를 추가하고 렌더링을 시작했습니다. 왜 그런지 모르겠다 :) –