Навигация

Итоги года

Другие ссылки


Реклама

Счётчики


The given assembly name or codebase was invalid

27.09.2006 Среда 17:42

Софт

BizTalk 2006
.Net Framework 2.0

Симптомы

Итак, проблема проявилась при тестировании только что развёрнутого BizTalk-приложения. На первом же receive pipeline'е в Event log'е появлялось следующее сообщение:


There was a failure executing the receive pipeline

blah-blah-blah...

Reason: The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)


При этом имел место следующий симптом - при добавлении pipeline'а в приложение при помощи BizTalk Administration Console (Resourses -> Add) pipeline вполне нормально добавлялся и в дальнейшем отображался с правильным именем. Однако при назначении pipeline'а какому-либо receive location'у, в списке доступных pipeline'ов имя моего pipeline'а было неправильным - а именно, отсутствовала последняя цифра в PublicKeyToken! То есть правильное имя, например, такое:

MyPipeline, MyCustomPipelines, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=f90fe11c5553f473


А отображалось такое имя:

MyPipeline, MyCustomPipelines, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=f90fe11c5553f47


Причина

Выяснилось, что pipeline имел очень длинное fully qualified name (значительно длиннее приведённого выше примера). А в базе данных BizTalk, в таблице BizTalkMgmtDb.dbo.bts_pipeline, предназначенной для хранения данных о pipeline'ах, колонка, содержащая fully qualified name pipeline'а имеет длину 256 символов, каковой и не хватало для моего pipeline'а, имя которого имело в длину 257 символов.

Решение

Проблема была решена уменьшением длины fully qualified name pipeline'а. А именно, было изменено имя assembly, содержащей pipeline, как наиболее безболезненный вариант решения. Коллега предлагал и вовсе кардинальный способ - увеличить длину колонки в BizTalk'овской таблице. :) Но мне это показалось слишком "грубым" решением. В конце концов, имя pipeline'а может содержаться далеко не только в этой таблице. И вообще, править внутренние BizTalk'овские таблицы - это уже хакерство какое-то.

Мораль

Не нужно слишком усердствовать в изобретении длинных имён, namespace'ов и т.п. Как показывает практика, иногда существуют вполне реальные ограничения по длине для таких вещей. Также можно посоветовать Microsoft увеличить максимально допустимую длину fully quialified name pipeline'а.

Примечания

1) Стоит отметить, что в настоящий момент упомянутый выше pipeline, имеющий 257 символов в имени, вполне успешно работает на production box'е. Каким образом - остаётся загадкой. Возможно, это как-то связано с разными вариантами deployment'а - через BizTalk Administration Console, через BizTalk Explorer в Visual Studio, через командую строку и т.д. Как бы то ни было, принято решение срочно это дело исправить.

2) Ошибка "The given assembly name or codebase was invalid" появляется тогда когда assembly с таким именем найдена, но её Version, PublicKeyToken или Culture не совпадают с ожидаемыми. Она может появляться в самых разнообразных контекстах, никак не связанных с BizTalk'ом.