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