Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在业务流程内的Biztalk消息中创建文件_C#_.net_File_File Io_Biztalk - Fatal编程技术网

C# 在业务流程内的Biztalk消息中创建文件

C# 在业务流程内的Biztalk消息中创建文件,c#,.net,file,file-io,biztalk,C#,.net,File,File Io,Biztalk,通过ftp从BizTalk 2006RC发送文件时遇到问题。 我要做的是创建一个名为“OPA0037”的真正文件,它只有一行 "OPA0037;TEST;;;" 它在ftp部分之后不是问题,我只是不知道如何从消息创建文件。。。它只能在编排中 欢迎任何帮助和想法!非常感谢 也许您可以尝试两个最常见的选项: 通过发送端口发送消息,并将该端口配置为使用文件或FTP适配器。如果文件是具有分隔结构的平面文件(如示例中所示),则应创建相应的平面文件架构和发送管道,其中包含平面文件汇编程序的汇编阶段。然后

通过ftp从BizTalk 2006RC发送文件时遇到问题。 我要做的是创建一个名为“OPA0037”的真正文件,它只有一行

"OPA0037;TEST;;;"
它在ftp部分之后不是问题,我只是不知道如何从消息创建文件。。。它只能在编排中


欢迎任何帮助和想法!非常感谢

也许您可以尝试两个最常见的选项:

  • 通过发送端口发送消息,并将该端口配置为使用文件或FTP适配器。如果文件是具有分隔结构的平面文件(如示例中所示),则应创建相应的平面文件架构和发送管道,其中包含平面文件汇编程序的汇编阶段。然后,配置物理端口以使用该管道
查看msdn中有关创建平面文件的演练:

  • 使用用于写入物理文件的代码创建.NET类库,并从编排中使用它。您需要添加类库程序集作为BTS项目的引用

也许您可以尝试两种最常见的选择:

  • 通过发送端口发送消息,并将该端口配置为使用文件或FTP适配器。如果文件是具有分隔结构的平面文件(如示例中所示),则应创建相应的平面文件架构和发送管道,其中包含平面文件汇编程序的汇编阶段。然后,配置物理端口以使用该管道
查看msdn中有关创建平面文件的演练:

  • 使用用于写入物理文件的代码创建.NET类库,并从编排中使用它。您需要添加类库程序集作为BTS项目的引用

    • 这里不清楚您遇到了什么问题,因此我将回顾您描述的每个步骤,并介绍各种选项。希望其中一点能够解决您的问题

      由于我一直在思考可能出现的额外问题,这篇文章涉及到了很多问题——我想你的关键部分将是最后一个使用BizTalk中的FTP传输发送消息的部分

      让我们知道你相处得如何

      在业务流程中创建平面文件消息 在BizTalk中,您从不以XML以外的任何格式创建业务流程消息

      要从BizTalk业务流程中创建平面文件消息,需要在设计时创建平面文件架构,然后在运行时生成此架构的实例,并通过在组装阶段配置了BizTalk平面文件汇编器的BizTalk发送端口将其发送出去

      平面文件模式只是一个XML模式,带有特殊注释,通知BizTalk平面文件汇编程序如何将XML序列化为文本

      因此,在业务流程中创建平面文件消息实际上与在业务流程中创建任何其他文档格式相同

      在业务流程中创建消息 那么,如何在BizTalk业务流程中创建新消息呢

      为了避免重现轮子,这里有一个链接,链接到Matt Meleski关于这个主题的一篇相当经典的文章

      总结一下Matt所说的,要在BizTalk中创建消息的新实例,您有四个主要选项:

    • 使用BizTalk映射从现有消息创建新消息
    • 在消息分配形状中从另一消息分配一条消息
    • 在消息分配形状中使用XML.XMLDocument变量
    • 使用返回所需类型消息的.NET helper类
    • 与大多数事情一样,上面的每个选项都可以有自己的长篇大论

      对于需要创建一个简单的单行文档的情况,映射选项(1)或XMLDocument选项(3)可能会帮助您找到需要的地方

      在BizTalk中使用FTP传输发送消息 我认为这可能是您的问题-如何使用指定的文件名在BizTalk中发送FTP消息或平面文件格式

      有很多方法可以做到这一点。我会给两个,希望第一个能起作用,但你可以回到第二个

      1。设置ReceivedFileName并使用%SourceFileName%宏

      在研究我的答案时,我不认为这种方法适用于FTP,但我发现了一个生产示例,我正在这样做。试试看

      在编排
      构造消息
      形状中,添加
      消息分配
      形状

      在该消息分配形状中,您可以为平面文件消息设置
      FILE.ReceivedFileName
      属性,如下所示:

      yourFlatFileMessage(FILE.ReceivedFileName) = whateverFileNameYouWant;
      
      这将设置一个上下文属性,当您将静态发送端口连接到业务流程端口时,将使用该属性。在静态发送端口中,指定FTP适配器的目标文件名如下:

      %SourceFileName%.txt

      然后FTP适配器将替换%SourceFileName%宏,为您提供一个类似WhateVerFileName youwant.txt的文件名

      然后,在发送端口中,您需要指定一个发送管道,该管道包含用于平面文件格式的平面文件汇编程序

      2。通过对管道的编程调用使用动态发送端口

      如果上述方法不起作用,则需要使用动态发送管道

      问题在于,要在BizTalk中发送具有指定文件名的FTP消息,需要使用动态发送端口但是使用动态发送端口,您仅限于直通管道,因此您没有地方指定平面文件汇编程序

      要创建一个动态发送端口,以创建您要在编排消息分配形状中使用以下代码的文件名(由blog提供):

      那么,如何让这个动态发送端口发送一个平面文件格式的文件呢

      这个把戏是讨论的
      //Set dynamic ports location:
      orchprtSndMyMessagePort(Microsoft.XLANGs.BaseTypes.Address) = "ftp://myserver/mydirectory/myfilename.xml";
      
      //Set context on the message you want to send:
      msgMyMessage(FTP.UserName) = "myFTPUsername";
      msgMyMessage(FTP.Password) = "myFTPPassword";
      msgMyMessage(BTS.RetryCount) = 20;
      msgMyMessage(BTS.RetryInterval) = 2; 
      
      //PipeMsg is a variable of type: Microsoft.XLANGs.Pipeline.SendPipelineInputMessages
      PipeMsg = new Microsoft.XLANGs.Pipeline.SendPipelineInputMessages();
      PipeMsg.Add(<MessageToAssemble>);
      Microsoft.XLANGs.Pipeline.XLANGPipelineManager.ExecuteSendPipeline(typeof    (<fullyQualifiedNameofSendPipline>),PipeMsg,msg_Output_FF);