【问题标题】:List all Applications, orchestrations if any, send ports and receive ports for BizTalk 2010?列出所有应用程序、业务流程(如果有)、BizTalk 2010 的发送端口和接收端口?
【发布时间】:2011-09-25 07:38:54
【问题描述】:

我需要列出所有应用程序、业务流程(如果有)、BizTalk 2010 的发送端口和接收端口。我正在尝试编写一个 sql 查询并获得许多重复项。谁能帮帮我?

SELECT
     APP.nvcName 
    ,APP.nvcName as [Application]
    ,A.nvcName AssemblyName
    ,O.nvcFullName OrchestrationFullName
    ,O.nvcName Orchestration
    ,'Send Port' as [PortType]
    ,S.nvcName as [PortName]
    ,S.bTwoWay as [SendType]
    ,'' --S.nvcName [ReceiveLocation]
    ,Adp.Name [AdapterType]
    ,RP.FullyQualifiedName [ReceivePipeline]
    ,SP.FullyQualifiedName [SendPipeline]
    ,S.nvcEncryptionCert [EncryptionCert]
FROM dbo.bts_application as APP
LEFT OUTER JOIN dbo.bts_sendport as S ON APP.nID = S.nApplicationID
LEFT OUTER JOIN  dbo.bts_sendport_transport as ST ON S.nID = ST.nSendPortID
LEFT OUTER JOIN  dbo.bts_assembly as A on A.nApplicationId = APP.nId
LEFT OUTER JOIN  dbo.bts_orchestration as O ON O.nAssemblyID = A.nId
LEFT OUTER JOIN  dbo.bts_orchestration_port AS OP ON OP.nOrchestrationID = O.nID
LEFT OUTER JOIN  dbo.bts_orchestration_port_binding as OPB ON PB.nOrcPortID = OP.nID --and OPB.nSendPortID = S.nID
LEFT OUTER JOIN  dbo.adm_Adapter as Adp ON ST.nTransportTypeId = Adp.Id
LEFT OUTER JOIN  dbo.bts_pipeline as RP on RP.Id = S.nReceivePipelineId
LEFT OUTER JOIN  dbo.bts_pipeline as SP on SP.Id = S.nSendPipelineId
WHERE S.nApplicationID is not null AND Adp.Name IS NOT NULL

【问题讨论】:

    标签: biztalk biztalk-2010


    【解决方案1】:

    您可以使用 powershell 列出所有应用程序、编排、接收和发送端口状态

    # Get BizTalk Application Information
    
    $applications = $BizTalkOM.Applications
    
    
    
    # Display BizTalk Application Information
    
    Write-Host "`nBizTalk Applications ("$applications.Count")" -fore DarkGray
    
    
    
    Foreach ($application in $applications) {
    
        if ($application.Status -eq "Started") {
    
            Write-Host $application.Name "- " -NoNewline
    
            Write-Host $application.Status -fore Green
    
        }
    
        elseif ($application.Status -eq "Stopped") {
    
            Write-Host $application.Name "- " -NoNewline
    
            Write-Host $application.Status -fore Red
    
        }
    
        else {
    
            Write-Host $application.Name "- " -NoNewline
    
            Write-Host $application.Status -fore DarkYellow
    
        }
    
    }
    $trackingRecPorts = get-wmiobject MSBTS_ReceivePort -namespace 'root\MicrosoftBizTalkServer' | Where-Object {$_.Tracking -gt 0 }
    
    
    $orchs = Get-WmiObject MSBTS_Orchestration -namespace 'root\MicrosoftBizTalkServer' | Where-Object {$_.OrchestrationStatus -ne 4 }
    

    【讨论】:

      【解决方案2】:

      与使用 BizTalkCatalogExplorer 类之类的东西相比,直接使用底层 SQL 通常更难正确(且不受支持)。

      MSDN 有一个很棒的 Powershell 脚本,它使用 BizTalkCatalogExplorer,可在 http://msdn.microsoft.com/en-us/library/dd257590(v=bts.70).aspx 找到。开箱即用,它将显示您提到的所有内容(然后是一些),实际发送/接收端口除外。

      要获取发送端口的详细信息,您可以执行以下操作(它是 powershell,基于上面链接的示例):

      #=== Make sure the ExplorerOM assembly is loaded ===#
      [void] [System.reflection.Assembly]::LoadWithPartialName("Microsoft.BizTalk.ExplorerOM")
      #=== Connect to the BizTalk Management database ===#
      $Catalog = New-Object Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer
      $Catalog.ConnectionString = "SERVER=.;DATABASE=BizTalkMgmtDb;Integrated Security=SSPI"
      foreach($port in $catalog.SendPorts)
      {
          Write-Host $port.Name
          Write-Host "`tSendPipeline: "$port.SendPipeline.FullName
          if($port.IsTwoWay)
          {
              Write-Host "`tReceivePipeline: "$port.ReceivePipeline.FullName
          }
          Write-Host "`tPrimaryTransportType: "$port.PrimaryTransport.TransportType.Name
          Write-Host "`tPrimaryTransportAddress: "$port.PrimaryTransport.Address
          Write-Host "`tPrimaryTransportTypeData: "$port.PrimaryTransport.TransportTypeData
          # $port.PrimaryTransport <--uncomment to see all of the properties of $port.PrimaryTransport
      }
      

      请注意,$port.PrimaryTransport.TransportTypeData 的结果将是一个 XML sn-p,其中包含自定义传输类型的属性。您将在该 XML 中找到您的密码字段。你必须解析它。当我在本地运行它进行测试时,它实际上也打印出了密码,所以小心你如何使用它。

      【讨论】:

      • 感谢您的回复。你是对的,但我只是在读取(而不是修改)数据库来填充一些报告。我还需要获取受密码保护的发送端口列表。原因是在从 2010 QA 迁移到 2010 生产时,我需要知道某些应用程序是否会因为密码保护而崩溃。然后,我可以通知管理员手动添加密码,因为导出应用程序不会导出密码(谢天谢地)。你能帮我解决这个问题吗?
      • 我更新了我的答案,添加了一个示例,说明如何使用 Powershell + ExplorerOM 获取发送端口。
      【解决方案3】:

      您可以使用 ExplorerOM dll 并使用公开的 API 来获取您需要的信息。

      http://msdn.microsoft.com/en-us/library/microsoft.biztalk.explorerom(v=bts.20).aspx

      【讨论】:

      • 谢谢。这就是我在 Schellack 回答后正在做的事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      相关资源
      最近更新 更多