2011-09-07 3 views
0

요약어떻게 어떻게 웹 서비스 내에있는 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; 
     } 
    } 
    } 
} 
+0

시도 여러 번 있지만, 제대로이 게시물의 끝 부분에 코드를 포맷하는 방법을 알아낼 수 없었다. –

+0

@ 단 짧음 - 코드 서식을 수정 해 주셔서 감사합니다. 트릭이란 무엇입니까? INSERT CODE 기호를 클릭하고 파란색 삽입 지점 위에 코드를 붙여 넣은 다음 모든 코드 줄이 4 개 이상의 들여 쓰기를했는지 확인했습니다. 또한 문자열 상수 내에 HTML 꺽쇠 괄호가있는 일부 줄을 제거했습니다. –

+0

그것은 Markoff라는 구피라고 생각합니다. 마지막 글 머리 기호와 코드 시작 사이에 "code"라는 단어를 추가하고 렌더링을 시작했습니다. 왜 그런지 모르겠다 :) –

답변

0

당신의 CF 사이트를 가정 아파치 또는 다른 웹 서버 일 수도 있습니다 :

webservice를 호출하는 .cfm 파일을 사이트의 하위 폴더에 넣으십시오. 익명 인증을 사용하도록 해당 폴더의 인증 속성을 설정하지만, 웹 서비스를 성공적으로 호출하는 Windows 도메인 계정에 사용자 ID를 설정하십시오. 아래 표시된 대화 상자에서 설정 ... 버튼을 클릭하고 적절한 자격 증명을 입력하십시오.

IIS 7.5 Manager showing Anonymous Authentication

관련 문제