2

在服务器中运行我的 BizTalk 包时出现以下错误:

无法路由已发布的消息,因为未找到订阅者

包说明:使用存储过程将 CSV 平面文件导入 SQL Server。

在此处输入图像描述

分解:

创建表代码:

CREATE TABLE [dbo].[Accounts](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [AccountName] [nvarchar](150) NULL,
    [ServiceAddress] [nvarchar](150) NULL,
    [AccountNumber] [nvarchar](50) NULL,
 CONSTRAINT [PK_Accounts] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

创建存储过程代码:

CREATE PROCEDURE [dbo].[InsertAccount]
    @AccountName AS NVARCHAR(150) ,
    @ServiceAddress AS NVARCHAR(150) ,
    @AccountNumber AS NVARCHAR(50)
AS 
    INSERT  INTO dbo.accounts
            ( AccountName ,
              ServiceAddress ,
              AccountNumber
            )
            SELECT  @AccountName ,
                    @ServiceAddress ,
                    @AccountNumber

平面文件:将其命名为 sample.csv

Account Name,Service Address,Account Number
JOE BLOW,ADDRESS X CITYX IL 61999,932F623Y52

我正在使用 WCF 连接到数据库 在此处输入图像描述

我正在使用存储过程 在此处输入图像描述

我为平面文件创建了一个模式 在此处输入图像描述

接收端口配置

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

发送端口配置

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我创建了一条消息来接收平面文件

在此处输入图像描述

我创建了一条消息以将 XML 发送到 SQL

在此处输入图像描述

我删除了接收组件并分配了平面文件消息 在此处输入图像描述

我删除了 Send 组件并分配了 Stored Proc Message

在此处输入图像描述

我为存储过程删除了一个接收响应组件

在此处输入图像描述

然后我删除了一个 Construct Message 组件来初始化 XML 文档并创建地图。

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我将包部署到服务器,没有部署到 GAC,然后我手动在 GAC 中注册了组件。

在此处输入图像描述

在服务器中:

我设置了所有的接收和发送端口:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

发送端口

在此处输入图像描述 在此处输入图像描述

我配置应用程序

在此处输入图像描述

我启动了应用程序:

  • 接收位置启用
  • 发送端口已启动
  • 我完全停止并重新启动了应用程序。

我删除了文件,文件消失了,我得到了错误

我收到以下错误

消息引擎无法处理适配器提交的消息:文件源 URL:C:\Biztalk Test\Sales\SampleFile*.csv。详细信息:无法路由已发布的消息,因为找不到订阅者。如果尚未征用订阅编排或发送端口,或者未提升订阅评估所需的某些消息属性,则会发生此错误。请使用 Biztalk 管理控制台解决此故障。

适配器“FILE”在接收位置“ServerReceiveLocation”上接收到的消息被挂起,URI 为“C:\Biztalk Test\Sales\SampleFile*.csv”。错误详细信息:无法路由已发布的消息,因为未找到订阅者。如果尚未征用订阅编排或发送端口,或者未提升订阅评估所需的某些消息属性,则会发生此错误。请使用 Biztalk 管理控制台解决此故障。

在此处输入图像描述 在此处输入图像描述

4

2 回答 2

4

基本上,您的编排上的订阅与接收到的消息的上下文属性不匹配。

总是当您收到该错误时,您需要做的是查看 Suspended 消息并查看它的外观并将其上下文属性与 BizTalk Administrator 中的 Subscriptions 进行比较。

在您的情况下,问题似乎是您没有具有平面文件反汇编程序的接收管道,其上指定的平面文件方案会将其转换为 XML 并使用带有架构名称的消息类型上下文属性发布它

所以发生的事情是它在没有消息类型的情况下将原始平面文件发布到消息框,并且消息类型也是编排订阅的内容,并且您没有特定的订阅规则来监听来自该端口的消息可以然后处理原始消息。所以它不知道如何处理该消息并因上述错误而将其挂起。

于 2015-12-03T21:16:30.727 回答
3

你说:

“我将包部署到服务器,没有部署到 GAC,然后我手动在 GAC 中注册了组件。”

但是,这表明 BizTalk Server 的部署过程不正确。您不必手动进行 GAC。此外,您没有在任何地方指明您向 BizTalk Server 注册(导入)组件。

如果不导入,运行时将看不到任何工件,因此找不到模式。

如果您在本地运行(此时您应该在此运行),只需从 Visual Studio 部署,所有内容都将自动注册和 GAG'd。

如果您要部署到远程服务器(它不能是您的 DEV/TEST BizTalk 实例),那么您必须从您构建的机器中导出一个 .msi 或使用 BizTalk 部署框架创建一个部署包。

于 2015-12-04T02:34:40.370 回答