ESB Toolkit BRE Itinerary Resolver Falha com Exceção

Aplica-se A
BizTalk Server 2013 Branch BizTalk Server 2013 Developer BizTalk Server 2013 Enterprise BizTalk Server 2013 Standard

Sintomas

A seguinte exceção é emitida com o ESB 2.2 no Microsoft BizTalk Server 2013, quando o pipeline de receção De ItinerárioSelectReceiveXML é utilizado para chamar o Motor de Regras de Negócio para selecionar dinamicamente um itinerário (utilizando a Resolução bri da ESB).

Nota

A exceção foi emitida pelo alvo de uma invocação.

 Fonte: Microsoft.Practices.ESB.Resolver.ResolverMgr

 Método: System.Collections.Generic.Dictionary'2[System.String,System.String] Resolve(Microsoft.Practices.ESB.Resolver.ResolverInfo, Microsoft.BizTalk.Message.Interop.IBaseMessage, Microsoft.BizTalk.Component.Interop.IPipelineContext)

Origem do Erro: mscorlib

TargetSite do Erro: System.Object InvokeMethod(System.Object, System.Object[], System.Signature, Booleano)

Erro StackTrace: em System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   em System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   em System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
   em System.Activator.CreateInstance(Tipo, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   em System.Activator.CreateInstance(Tipo de tipo, Objeto[] args)
   em Microsoft.Practices.ESB.Resolver.ResolverFactory.Create(Chave de cadeia)
   em Microsoft.Practices.ESB.Resolver.ResolverMgr.GetResolver(ResolverInfo info)
   em Microsoft.Practices.ESB.Resolver.ResolverMgr.Resolve(ResolverInfo info, IBaseMessage message, IPipelineContext pipelineContext)

        
      

Causa

O ESB Toolkit 2.2 utiliza o Unity 2.0, que requer modificações ao ficheiro esb.config.

Resolução

Tem de atualizar o ficheiro esb.config para resolver este problema. Para tal, guarde uma cópia de segurança do esb.config original (a localização predefinida é C:\Program Files (x86)\Microsoft BizTalk ESB Toolkit) antes de efetuar qualquer uma das seguintes alterações. Tenha em atenção que esb.config alterações de ficheiro exigirão uma reciclagem do processo que está a utilizar o ESB.

Modifique manualmente o ficheiro de esb.config existente da seguinte forma:

  1. Remover o <elemento typeConfig>
  2. Alterar o <elemento typeAlias> para alias <>
  3. Alterar o <elemento de tipo> para <registar>
  4. Remover os elementos dos <contentores>
  5. Remover os elementos de <tipos>
  6. Remover os <elementos typeAliases>
  7. Remova o atributo parameterType dos elementos do <parâmetro> .
  8. Remova o atributo de tipo do <elemento de valor> no <parâmetro name="overrideExistingItinerary">

Todas as alterações acima ocorrem na <secção esb.resolver> do ficheiro esb.config. Segue-se a <secção esb.resolver> com todas as alterações acima já implementadas.

  <esb.resolver xmlns="http://schemas.microsoft.com/practices/2010/unity>">
      <!-- Lifetime manager types -->
      <alias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity, Version=2.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <!-- std type providers -->
    <alias alias="string" type="System.String, mscorlib"/>
    <alias alias="int" type="System.Int32, mscorlib"/>
    <alias alias="bool" type="System.Boolean, mscorlib"/>
      <!-- repository providers -->
    <alias alias="IRepositoryProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.Facts.Repository.IRepositoryProvider, Microsoft.Practices.ESB.Resolver.Itinerary.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="SqlRepositoryProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.DataAccess.SqlRepositoryProvider, Microsoft.Practices.ESB.Resolver.Itinerary.DataAccess, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <!-- fact providers -->
    <alias alias="IFactProvider" type="Microsoft.Practices.ESB.Resolver.Facts.IFactProvider, Microsoft.Practices.ESB.Resolver.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="IFactTranslator" type="Microsoft.Practices.ESB.Resolver.Facts.IFactTranslator, Microsoft.Practices.ESB.Resolver.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="ItineraryFactProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.Facts.ItineraryFactProvider, Microsoft.Practices.ESB.Resolver.Itinerary.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="ItineraryStaticFactProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.Facts.ItineraryStaticFactProvider, Microsoft.Practices.ESB.Resolver.Itinerary.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="ItineraryHeaderFactProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.Facts.ItineraryHeaderFactProvider, Microsoft.Practices.ESB.Resolver.Itinerary.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
   <alias alias="ItineraryContentsFactProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.Facts.ItineraryContentsFactProvider, Microsoft.Practices.ESB.Resolver.Itinerary.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="ResolutionFactProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.Facts.ResolutionFactProvider, Microsoft.Practices.ESB.Resolver.Itinerary.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="DefaultFactTranslator" type="Microsoft.Practices.ESB.Resolver.Facts.DefaultFactTranslator, Microsoft.Practices.ESB.Resolver.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="ItineraryFactTranslator" type="Microsoft.Practices.ESB.Resolver.Itinerary.Facts.ItineraryFactTranslator, Microsoft.Practices.ESB.Resolver.Itinerary.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="ItineraryContentsFactTranslator" type="Microsoft.Practices.ESB.Resolver.Itinerary.Facts.ItineraryContentsFactTranslator, Microsoft.Practices.ESB.Resolver.Itinerary.Facts, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <!-- resolve providers -->
    <alias alias="IResolveProvider" type="Microsoft.Practices.ESB.Resolver.IResolveProvider, Microsoft.Practices.ESB.Resolver, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    <alias alias="ItineraryResolveProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.BREItineraryResolverContainer,Microsoft.Practices.ESB.Resolver.Itinerary, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 "/>
    <alias alias="StaticItineraryResolveProvider" type="Microsoft.Practices.ESB.Resolver.Itinerary.StaticItineraryResolveContainer,Microsoft.Practices.ESB.Resolver.Itinerary, Version=2.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 "/>
    <!-- test containers -->
      <container name="BRI">
          <register type="IResolveProvider" mapTo="ItineraryResolveProvider" />
        <register type="IFactProvider" mapTo="ItineraryFactProvider" name="ItineraryFactProvider">
            <lifetime type="singleton" />
          </register>
        <register type="IRepositoryProvider" mapTo="SqlRepositoryProvider" name="CurrentRepositoryProvider">
            <lifetime type="singleton" />
              <constructor>
                <param name="connectionStringName">
                  <value value="ItineraryDb"/>
                </param>
                <param name="cacheManagerName">
                  <value value="Itinerary Cache Manager"/>
                </param>
                <param name="cacheTimeout">
                  <value value="120" />
                </param>
              </constructor>
          </register>
        <register type="IFactTranslator" mapTo="DefaultFactTranslator" name="DefaultFactTranslator">
            <lifetime type="singleton" />
          </register>
        <register type="IFactTranslator" mapTo="ItineraryFactTranslator" name="ItineraryFactTranslator">
            <lifetime type="singleton" />
              <constructor>
                <param name="repositoryProvider">
                  <dependency name="CurrentRepositoryProvider"/>
                </param>
              </constructor>
          </register>
      </container>
      <container name="ITINERARY">
        <register type="IResolveProvider" mapTo="StaticItineraryResolveProvider" />
        <register type="IRepositoryProvider" mapTo="SqlRepositoryProvider" name="CurrentRepositoryProvider">
            <lifetime type="singleton" />
              <constructor>
                <param name="connectionStringName">
                  <value value="ItineraryDb"/>
                </param>
                <param name="cacheManagerName">
                  <value value="Itinerary Cache Manager"/>
                </param>
                <param name="cacheTimeout">
                  <value value="120" />
                </param>
              </constructor>
          </register>
        <register type="IFactProvider" mapTo="ResolutionFactProvider" name="ResolutionFactProvider"  />
    <register type="IFactProvider" mapTo="ItineraryHeaderFactProvider" name="HeaderFactProvider"  />
        <register type="IFactProvider" mapTo="ItineraryStaticFactProvider" name="StaticFactProvider"  />
        <register type="IFactProvider" mapTo="ItineraryContentsFactProvider" name="ItineraryContentsFactProvider"  />
        <register type="IFactTranslator" mapTo="DefaultFactTranslator" name="DefaultFactTranslator">
            <lifetime type="singleton" />
          </register>
            <register type="IFactTranslator" mapTo="ItineraryFactTranslator" name="ItineraryFactTranslator">
            <lifetime type="singleton" />
              <constructor>
                <param name="repositoryProvider">
                  <dependency name="CurrentRepositoryProvider"/>
                </param>
              </constructor>
          </register>
        <register type="IFactTranslator" mapTo="ItineraryContentsFactTranslator" name="ItineraryContentsFactTranslator">
    <lifetime type="singleton" />
      <constructor>
       <param name="overrideExistingItinerary">
        <value value="False"/>
       </param>
      </constructor>
    </register>
    </container>
  </esb.resolver>

      

Mais Informações

Encontre mais informações sobre o Unity 2.0 em http://msdn.microsoft.com/en-us/library/ff660914(v=pandp.20).aspx