【问题标题】:Set Context propeties when receive FtpDownload stream接收 Ftp 下载流时设置 Context 属性
【发布时间】:2017-12-05 15:28:21
【问题描述】:

我正在研究一种使用 taskscheduler 适配器在 BizTalk 中创建计划任务的解决方案。 使用 C# 组件,我创建了返回流的 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;
        }
    }

【问题讨论】:

    标签: c# ftp stream biztalk ftpwebrequest


    【解决方案1】:

    不幸的是,开箱即用的 STA 无法将上下文值从提供程序传递到消息。

    但是,您可以通过修改 (Non)TransactionalTask​​s 和您的提供者来修改适配器来执行此操作,以返回包含流和属性包的对象。

    然后将属性写入创建的消息。

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多