一个同事让我看看在我们的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。其他现有应用程序的绑定导入工作正常。如果我将绑定文件中唯一编排上的程序集版本更改为无效的版本,则导入运行良好,但显然该应用程序无法运行,因为该程序集不存在。
答案 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的运行状况。
启动代理并让工作完成工作后,原始绑定文件的导入就像梦一样。
希望这对某人有帮助。