Как создать веб-метод POST в файл HTTPHandler.ashx - PullRequest
0 голосов
/ 07 сентября 2011

Резюме

Как создать HTTPContext в веб-сервисе? или POST в Handler.ashx из веб-сервиса?

Фон

У меня есть веб-приложение Cold Fusion, которое использует проверку подлинности с помощью форм, но как-то выполняет проверку подлинности Windows с помощью этого сценария:

<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, и это работает в производственной среде. (Веб-сервис написан на C # и построен на .Net 4.0. Он должен использоваться этой учетной записью домена)
  • Я разработал DownloadHandler.ashx, который работает, когда POST подключен к процессу, работающему под этой учетной записью домена (у меня есть веб-клиент .Net с кнопкой, которая определяет PostBackUrl = "~ / DownloadHandler.ashx"). Этот HTTPHandler получает несколько элементов из HTTPContext, а затем без проблем вызывает вышеуказанный метод веб-сервиса DownloadFile.

Моя проблема Теперь этому приложению ColdFusion необходимо загрузить файл с помощью этого веб-сервиса. Когда код CF отправляет HTML-форму в DownloadHandler.ashx, он работает - НО ТОЛЬКО ЕСЛИ тестер CF использует эту учетную запись домена Windows. Это не будет работать в производстве, потому что приложение CF поддерживает удаленных анонимных пользователей посредством проверки подлинности с помощью форм.

Вопрос

Не зная ColdFusion, я думал о следующих изменениях:

  • Воспроизведите вышеприведенную технику CF так, чтобы user / pswd можно было установить одинаково, и чтобы CF вызывал метод ws.DownloadFile напрямую

  • Я думаю, что это потребовало бы использования большей части моего текущего кода HTTPHandler в моем веб-сервисе, но я не могу думать о том, как обработать вывод. Когда этот обработчик помещен в POST, он запрашивает OPEN или Save и работает хорошо, но я не совсем понимаю, как мне передать это обратно из самого веб-сервиса.

  • Текущий веб-метод DownloadFile связывается с продуктом базы данных и возвращает выходные данные этому (текущему) обработчику:

Код

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;
        }
     }
     }
}

1 Ответ

0 голосов
/ 07 сентября 2011

Если ваш сайт CF работает на IIS, а не на Apache или каком-либо другом веб-сервере, это может работать:

Поместите свой файл .cfm, который вызывает веб-сервис, в его собственную подпапку на вашем сайте. Задайте для свойств аутентификации этой папки использование анонимной аутентификации, но задайте для идентификатора пользователя учетную запись домена Windows, которая успешно вызывает веб-службу (нажмите кнопку «Установить ...» в диалоговом окне, показанном ниже, и введите соответствующие учетные данные).

IIS 7.5 Manager showing Anonymous Authentication

...