2017-12-05 34 views
0

taskscheduler 어댑터를 사용하여 BizTalk에서 예약 된 작업을 만드는 솔루션을 만들고 있습니다. C# 구성 요소를 사용하여 스트림을 반환하는 FTPDownload 함수를 만들었습니다.FtpDownload 스트림을받을 때 컨텍스트 특성을 설정하십시오.

다음과 같은 문제가 발생합니다. 파일 이름을 스트림의 표시로 가져와 올바른 출력 파일 이름을 얻기 위해 다른 솔루션에서이 파일을 읽을 수 있어야합니다.

파일 이름을 읽는 솔루션의 경우 BizTalk 메시지의 컨텍스트 속성을 사용하며 스트림으로 FTP를 읽을 때 파일 이름을 다시 컨텍스트 속성으로 설정할 수 있으면 좋을 것입니다.

public class FTPReceive : IScheduledTaskStreamProvider 
    { 
     private readonly string TASK_COMPONENT_NAME = "ScheduledTask FTPReceive"; 

     public Type GetParameterType() 
     { 
      return typeof(FTPReceiveArguments); 
     } 

     public Stream GetStream(object args) 
     { 
      int retryCounter = 1; 
      bool isDownloaded = false; 
      Stream responseStream = null; 

      FTPReceiveArguments parameter = (FTPReceiveArguments) args; 

      if (string.IsNullOrWhiteSpace(parameter.Url)) 
      { 
       throw new ArgumentNullException(TASK_COMPONENT_NAME, "URL is null or Empty"); 
      } 

      while (!isDownloaded && retryCounter <= parameter.RetryCount) 
      { 
       try 
       { 
        FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create(@parameter.Url); 
        ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile; 
        ftpRequest.Credentials = new NetworkCredential(parameter.Username, parameter.Password); 

        FtpWebResponse ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); 
        ftpResponse.Headers.Add("Content-disposition", "inline; filename=fileName.ext"); 
        //ftpResponse.Headers.Add("fileNameTest.xml"); 
        responseStream = ftpResponse.GetResponseStream(); 
        //responseStream. 
        isDownloaded = true; 
       } 
       catch (WebException wex) 
       { 
        if ((retryCounter +1) <= parameter.RetryCount) 
        { 
         Thread.Sleep(parameter.RetryInterval * 60000); 
        } 
        else 
        { 
         // Only Log Information to prevent the adapter will be disabled! 
        } 

        retryCounter++; 
       } 
       catch (Exception ex) 
       { 
        // Do nothing, otherwise the adapter will be disabled! 
       } 
      } 

      if (isDownloaded && responseStream != null) 
      { 

       return responseStream; 
      } 

      return null; 
     } 
    } 

답변

0

불행히도 상자 STA에는 공급자의 컨텍스트 값을 메시지에 전달할 수있는 기능이 없습니다.

그러나 (Non) TransactionalTasks 및 공급자가 스트림 및 속성 가방을 모두 포함하는 개체를 반환하도록 수정하여 어댑터를 수정할 수 있습니다.

그런 다음 생성 된 메시지에 속성을 씁니다.