导入特定的绑定文件时,BizTalk 2016挂起

时间:2018-06-26 00:58:50

标签: teamcity biztalk biztalk-2016

一个同事让我看看在我们的CI代理之一上构建的BizTalk应用程序失败了。长话短说,在导出.MSI文件之后,部署脚本会尝试为应用程序导入绑定文件。它只会旋转一个小时,然后因以下错误而失败:

  

错误:无法更新绑定信息。   类型||'Microsoft.BizTalk.CachingService.NotificationFailedException ||'的异常被扔了。

脚本通过以下方式使用BizTalk PowerShell管理单元:

Add-PSSnapin –Name BizTalkFactory.PowerShell.Extensions

给出上述错误的行是:

Import-Bindings -Path "BTS:\Applications\$AppToDeploy" -Source "$bindingsFileName"

就CI管道而言,这是一个新应用程序。我已经尝试在本地和另一台BizTalk开发计算机上运行相同的脚本,并且该脚本可以无意外地导入。

还尝试使用BizTalk管理控制台手动导入绑定xml文件。它也挂在CI框上,但在开发机器上可以正常工作。

当挂起时,如果您查看SQL(位于同一台计算机上),则存在阻塞的进程。导致该块的进程没有进行任何更新,因此我假设它是某种DTC锁。 BizTalk中没有加载其他活动的SQL用户或应用程序。 CPU处于空闲状态,内存占20%,磁盘活动几乎已死。

看起来像是该新应用程序的CI代理机器特有的东西,却无所适从。我可以启用BizTalk的日志或跟踪功能,以查看绑定导入卡在哪里以及为什么卡住了吗?

P.S。其他现有应用程序的绑定导入工作正常。如果我将绑定文件中唯一编排上的程序集版本更改为无效的版本,则导入运行良好,但显然该应用程序无法运行,因为该程序集不存在。

1 个答案:

答案 0 :(得分:2)

最后!感谢Dijkgraaf提出的一些令人发指的想法,使它奏效了。

简短版本:在CI框中启动SQL Agent。

结果证明,绑定文件中的业务流程具有以下跟踪选项:

//These utilities will be used to communicate with the servers.
private static final String TAG = NetworkUtils.class.getSimpleName();

private static final String BASE_URL = "https://api.themoviedb.org/3/discover/movie";
private static final String API_KEY = "1f5029b7d824dee72f4d4a156dac90ed";

//This builds the URL used to talk to movie database.
public static URL buildUrl(String SEARCH_TERM) {
    Uri builtUri = Uri.parse(BASE_URL).buildUpon()
            .appendQueryParameter("api_key",API_KEY)
            .appendQueryParameter("sort_by", SEARCH_TERM)
            .build();

    URL url = null;
    try {
        url = new URL(builtUri.toString());
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    Log.v(TAG, "Built URL " + url);

    return url;
}

//This method returns the entire result from the HTTP response.
public static String getReponseFromHttpUrl(URL url) throws IOException {
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
    try {
        InputStream inputStream = urlConnection.getInputStream();

        Scanner scanner = new Scanner(inputStream);
        scanner.useDelimiter("\\A");

        boolean hasInput = scanner.hasNext();
        if (hasInput) {
            return scanner.next();
        } else {
            return null;
        }
    } finally {
        urlConnection.disconnect();

    }
}

如果此列表被精简为:

TrackingOption="ServiceStartEnd MessageSendReceive InboundMessageBody OutboundMessageBody OrchestrationEvents TrackPropertiesForIncomingMessages TrackPropertiesForOutgoingMessages"

...导入将起作用。这使我认为这是一个跟踪基础结构问题,促使我检查执行维护的SQL代理作业。因为它是CI代理,并且实际上没有任何东西使用BizTalk功能,所以没有必要检查BizTalk的运行状况。

启动代理并让工作完成工作后,原始绑定文件的导入就像梦一样。

希望这对某人有帮助。