0

我有一个 BizTalk 解决方案,它分为三个项目:编排、地图和架构。我的一些地图,我必须在 Orchestrations 项目中构建,因为它们需要多个输入模式,而且我发现仅使用 BizTalk Mapper 并没有简单的方法来做到这一点。一旦我让它们工作,我就把它们移到我的地图项目中。但是当我尝试构建该项目时,每个移动的地图都会出现以下错误(所有地图上的相同位置):

错误的意外标识符:“ÿþ”(第 2 行,第 2 列)

错误意外标记:'<'(第 2 行,第 4 列)

我在地图上的任何地方或不应该在的任何地方都找不到这些值。我尝试以不同的格式保存地图,复制并粘贴到新文档,删除第 2 行(这只是文档创建时自动生成的注释),将地图移回 Orchestration 项目,一切都不足完全从头开始重新创建地图。

有没有人见过这个并且知道出了什么问题?

谢谢!斯蒂芬妮

4

3 回答 3

1

正如您所发现的,没有简单的方法可以直接从 BizTalk 映射器创建具有多个输入或多个输出的映射。正确的方法确实是从 BizTalk 编排中执行此操作。

一种不需要在之后移动生成的地图的方法是在您的地图项目中创建一个空的编排。当不再需要时,可以丢弃此编排。

但是,如果您必须将地图从一个项目移动到另一个项目,请注意以下几点:

  • 导入的架构位置
  • .Net 命名空间

导入的架构位置

创建地图时,输入和输出模式的位置记录在生成的 .btm 文件中。但是,此位置有两种形式,具体取决于地图相对于导入模式位置的位置。

如果映射使用在引用程序集中声明的架构,则该位置看起来像生成的 .net 类型的完全限定名称。如果您从 Orchestrations 项目中生成了地图,但它引用了 Schemas 和 Maps 项目中的模式,则肯定是这种情况。

如果地图使用在同一项目/程序集中声明的架构,则该位置将记录为相对路径名。

当您将地图从一个 BizTalk 项目移动到另一个时,您必须恢复正确的方式来声明架构位置。在文本编辑器中打开 .btm 文件并将完全限定名称更改为相对路径,如下所示:

".\imported_schema.xsd"

.Net 命名空间

此外,如果您已将地图从一个项目移动到另一个项目,您可能需要更新其 .Net 命名空间。在创建时,一个 .net 命名空间与您的地图相关联,并且对应于在其中生成它的项目中的命名空间。

您可以从 Visual Studio 解决方案资源管理器中的 .btmp 文件属性更改此命名空间。这样,您将始终对来自同一项目的所有工件进行一致的命名。

于 2011-02-18T10:29:12.200 回答
0

和 marnix 一样,我对“ÿþ”的第一反应也是 Unicode。也许您的文件以某种方式以不同的格式保存。

尝试对您的工作和非工作地图文件执行以下操作:

在 Visual Studio 中

 File > Open > File ... >
 Select your map file > Open With ... (the small dropdown on the Open button) >
 Binary Editor > OK

也许您可以发现文件之间的差异。

另一种尝试是在 Visual Studio 中打开您的地图文件

 ...(as above)... > Open With ... >
 XML Editor > OK

然后

 File > Advanced Save Options

现在看看那里显示了什么编码。也许您只需要在此处更改非工作地图文件的编码(例如,从 UTF-16 到 UTF-8)并再次保存它们以使 BizTalk 的构建引擎满意。

于 2011-02-25T14:23:09.770 回答
0

我对 BizTalk 一无所知。完全没有。

但是从上面的错误我推断有一些文件看起来像这样:

  • 它以空行开头(最多一些空格)。
  • 然后它可能有一个空格作为第 2 行的第一个字符。
  • 然后它有字节 0xFF 和 0xFE,这是 UTF-16 编码文件中使用的Unicode 字节顺序标记(BOM)。
  • 然后是“<”,表示 XML 的开头。

BOM 的目的是成为 UTF-16 编码文件的前两个字节。

因此,该文件看起来像是一个 UTF-16 编码的 XML 文件,但是在文件的开头添加了一些空格。

我不知道文件格式应该是什么,也不知道在哪里引入了空格,也不知道应该在哪里修复。但也许这种分析会有所帮助。

于 2011-02-16T16:24:12.460 回答