Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# 带BTARN的BizTalk:找不到文档规范,因为多个架构与消息类型“匹配”;“字符串”;_C#_Wcf_Biztalk_Biztalk 2013_Mscorlib - Fatal编程技术网

C# 带BTARN的BizTalk:找不到文档规范,因为多个架构与消息类型“匹配”;“字符串”;

C# 带BTARN的BizTalk:找不到文档规范,因为多个架构与消息类型“匹配”;“字符串”;,c#,wcf,biztalk,biztalk-2013,mscorlib,C#,Wcf,Biztalk,Biztalk 2013,Mscorlib,我们安装了BizTalk 2013,其中还安装了用于RosettaNet的BizTalk加速器(BTARN)。有一个业务流程作为WCF服务使用(使用BizTalk WCF服务向导生成)。编排是根据.NET v4.5编译的,通过WCF调用编排的代码也是如此。业务流程的传入消息类型是我们定义的模式(也是根据v4.5编译的),其中包含一组字符串。下面是该模式的一个小片段: <?xml version="1.0" encoding="utf-16"?> <xs:schema xmlns

我们安装了BizTalk 2013,其中还安装了用于RosettaNet的BizTalk加速器(BTARN)。有一个业务流程作为WCF服务使用(使用BizTalk WCF服务向导生成)。编排是根据.NET v4.5编译的,通过WCF调用编排的代码也是如此。业务流程的传入消息类型是我们定义的模式(也是根据v4.5编译的),其中包含一组字符串。下面是该模式的一个小片段:

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://zzz.Engine.Schemas.RequestCanonical" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://zzz.Engine.Schemas.RequestCanonical" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Request">
    <xs:annotation>
      <xs:appinfo>
        <b:properties>
          <b:property distinguished="true" xpath="/*[local-name()='Request' and namespace-uri()='http://zzz.Engine.Schemas.RequestCanonical']/*[local-name()='Document' and namespace-uri()='']" />
          <b:property distinguished="true" xpath="/*[local-name()='Request' and namespace-uri()='http://zzz.Engine.Schemas.RequestCanonical']/*[local-name()='SenderId' and namespace-uri()='']" />
        </b:properties>
      </xs:appinfo>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="1" maxOccurs="1" name="Document" type="xs:string" />
        <xs:element minOccurs="1" maxOccurs="1" name="SenderId" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
这是可以理解的,因为BTARN组件已将
mscorlib v2.0.0
安装到
BizTalk.System
资源中,并且我们的应用程序在部署时安装了
mscorlib v4.0.0

这两个库的存在混淆了BizTalk,它无法决定使用哪一个来解析类型
字符串

我试图通过将模式、管道和编排DLL中对
System
的所有引用标记为
使用特定版本来解决这个问题,但这没有效果

我如何解决这个问题

更新:

这些条目列在
All artifact->Schemas
下,具有根名称
string

正如您所看到的,这里唯一重复的名称空间是两个具有空白名称空间的条目。这可能是冲突的原因吗?在安装BTARN之前,第三个条目(
mscorlib v2.0.0.0
)不存在


我试图定义一个自定义的
string
数据类型,因此这里没有引用
mscorlib
,但到目前为止我还无法成功地这样做。

问题是,在同一命名空间中部署了根节点名为string(而不是类型为string的元素)的模式。如果您无法更改(在本例中,您可能无法更改?),请将涉及这些消息的发送端口更改为使用
PassThruTransmit
管道,而不是
xmltranmit
。这样,它就不会尝试对该消息类型执行模式解析


BizTalk要将架构解析为文档,它依赖于根节点名称和命名空间来形成唯一键—这是BTS.MessageType属性。在下面的屏幕截图中,从我现在工作的环境中,您可以看到我部署了三个模式(我通过转到管理控制台中的
All Artifacts->schemas
节点,按节点名对其进行排序,并转到可以看到字符串作为根节点名的位置来获得此视图):

图片中的第一列提供了程序集名称-您可以看到两个来自GlobalPropertiesSchemas(存储到BizTalk),一个来自我的一个应用程序的自定义程序集(此处最右边的列显示了该应用程序-默认情况下,为了可读性,我还删除了另一列)

这些架构将具有以下消息类型:

  • http://www.w3.org/2003/05/soap-encoding#string
  • http://schemas.xmlsoap.org/soap/encoding/#string
  • http://schemas.microsoft.com/2003/10/Serialization/#string

因此,当管道按消息类型获取文档规范时,它不会获得任何重复的密钥冲突。但是,如果其中任意两个的名称空间相同,则在尝试发送该消息类型的消息时会出现问题(您现在遇到的错误)。您需要查看部署的架构,找出哪些程序集/应用程序具有根名称字符串重复的消息类型。RosettaNet加速器很可能安装了一个您也正在应用程序中部署的模式。解决方案是将其从应用程序中删除,并在应用程序中引用RosettaNet架构库。

我更新了我的帖子,以显示带有
根名称
项,该名称为
字符串
,我觉得mscorlib被导入BizTalk数据库似乎很奇怪(与仅从GAC引用不同)-我不能说我以前见过这种情况。BizTalk将字符串数据类型视为架构似乎也很奇怪。如果无法解决此问题,只需将发送此架构的端口更改为PassthrusTransmit,然后它就不会尝试进行架构解析。
Microsoft.BizTalk.Component.XmlAsmException: C0C01306: Cannot locate document specification because multiple schemas matched the message type "string".
   at Microsoft.BizTalk.Component.XmlAsmStreamWrapper.Read(Byte[] buffer, Int32 offset, Int32 count)
   at System.Xml.XmlTextReaderImpl.InitStreamInput(Uri baseUri, String baseUriStr, Stream stream, Byte[] bytes, Int32 byteCount, Encoding encoding)
   at System.Xml.XmlTextReaderImpl.FinishInitStream()
   at System.Xml.XmlReaderSettings.CreateReader(Stream input, Uri baseUri, String baseUriString, XmlParserContext inputContext)
   at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkBodyWriter.WriteBizTalkBody(XmlDictionaryWriter writer)
   at Microsoft.BizTalk.Adapter.Wcf.Runtime.BizTalkBodyWriter.OnWriteBodyContents(XmlDictionaryWriter writer)
   at System.ServiceModel.Channels.Message.OnWriteMessage(XmlDictionaryWriter writer)
   at System.ServiceModel.Channels.BufferedMessageWriter.WriteMessage(Message message, BufferManager bufferManager, Int32 initial