SharePoint 2019/2016 KB5002639適用後にBCS(BDC)がデプロイできない「DotNetAssembly/WebService system type is not supported」原因と対処法

SharePoint Server 2019/2016 に KB5002639 以降の更新を適用した後、BCS(BDC)ソリューションがデプロイできず「DotNetAssembly/WebService system type is not supported.」で失敗する事象があります。本記事では原因の整理と、修正パッチ適用・PowerShellによる暫定回避・再発防止までを具体的にまとめます。

目次

起きていること:KB適用後に BCS(BDC)ソリューション/BDCモデルのデプロイが失敗する

SharePoint Server 2019(オンプレミス)で KB5002639 および後続の更新プログラムを適用した後から、Business Connectivity Services(BCS)の BDC/BCS ソリューション(BDCモデル)がデプロイできなくなるケースが報告されています。SharePoint 2016 でも同様の症状が出ることがあり、外部リストや検索クロール(LOB コンテンツのクロール)でも例外が発生することがあります。

現場でよく見える症状は次のとおりです。

  • Visual Studio から BDC モデルをデプロイしたはずなのに、BDC(外部コンテンツタイプ)が見えない/外部リストが作れない
  • Central Administration(または PowerShell)で .bdcm を手動アップロードすると インポートに失敗する
  • ULS などに以下のようなエラーが出る
    • DotNetAssembly/WebService system type is not supported.
    • Error was encountered at or just before Line: '4' and Position: '6'.
操作・イベント期待する結果実際に起きることログ/メッセージの例
Visual Studio から BDC モデルをデプロイ外部コンテンツタイプが作成され、外部リストで利用できるデプロイは完了したように見えるが、BDC が表示されない/利用できないULS に system type 非対応の例外が残る場合がある
Central Admin から .bdcm をインポートモデルがインポートされ、外部コンテンツタイプが作成されるインポート自体が失敗し、モデルが取り込まれないDotNetAssembly/WebService system type is not supported.
既存の外部リスト/外部データ列を閲覧外部システム(LOB)からデータが表示されるページ表示時に例外、またはデータが取得できないBCS 関連の例外(環境によりメッセージは異なる)
検索クロールで BCS コンテンツをクロール外部データが検索インデックスに入るクロール失敗や例外が発生クロールログ/ULS に BCS 起因のエラーが残る

原因の整理:DotNetAssembly / WebService タイプの BDC モデルがブロックされている可能性

本件の要点は、BDC モデル(.bdcm)の中でも DotNetAssembly または WebService を使うモデルに症状が集中している点です。エラーが示唆するように、モデル内に以下のような定義があると失敗しやすくなります。

<LobSystem ... Type="DotNetAssembly">
  ...
</LobSystem>

更新プログラム適用後に「DotNetAssembly / WebService 系の BCS(BDC)モデルがブロック(または互換性が破壊)される」挙動になっている可能性が高く、スレッド内では退役(無効化)相当の変更が入ったのではという推測も出ています。

DotNetAssembly / WebService は、SharePoint サーバー側で .NET アセンブリや SOAP/サービス呼び出しを伴う設計になりやすく、セキュリティ強化や制限変更の影響を受けやすい領域です。今回のように「以前は動いていたが、特定の KB 以降で import/deploy が落ちる」場合、モデル側の不具合というより プラットフォーム側の許可/制限変更を疑うのが切り分けの近道になります。

BDC モデルの LOB 種別(Type)典型的な接続先今回の事象との関係確認のポイント
DatabaseSQL Server 等の DB比較的影響が少ないケースが多いDatabase 型が動くなら「DotNetAssembly/WebService 限定の問題」の可能性が上がる
OData(環境・実装により)OData エンドポイントDotNetAssembly/WebService を避ける代替になりうるオンプレの構成・認証方式で接続できるか事前検証が必要
DotNetAssemblySharePoint サーバー上の .NET アセンブリエラーの中心Type="DotNetAssembly" が含まれるか、デプロイ後に import が失敗していないか
WebServiceSOAP/サービス連携エラーの中心Type="WebService" が含まれるか、同様に import が失敗していないか

切り分けのコツ:まず「DotNetAssembly/WebService だけが落ちている」かを確認する

復旧作業の前に、次の観点で状況を整理すると、対応の優先順位が決めやすくなります。

確認項目やること判断の目安
影響が出たタイミング直近で適用した KB(特に KB5002639 以降)を洗い出す更新直後から発生していれば、パッチ起因の可能性が高い
BDC モデルの Type.bdcm を開き、Type="DotNetAssembly" または Type="WebService" が含まれるか確認含まれる場合、本事象に該当しやすい
Database 型の BCS が動くか同じ環境で Database 型モデル(既存でも検証用でも可)を import してみるDatabase が動くなら、BCS 全体停止ではなく「特定タイプの制限」に寄っている
既存モデルの挙動更新前からあった外部リスト/検索クロールが、更新後に同時に落ちたか確認既存も落ちるなら、単なる新規デプロイ失敗ではなく実行時にも影響がある

特に、エラーが Line 4 / Position 6 のように早い位置を指している場合は、モデル内の先頭付近(<LobSystem ... Type="..."> など)の型チェックで弾かれている可能性が高いです。つまり「モデルが壊れている」より「型が許可されない」方向の問題に寄ります。

恒久対応:修正済み更新プログラム(KB5002771 / KB5002772)の適用を最優先にする

コミュニティ報告では、2025/8/12 公開の KB5002771 と KB5002772 が本件を解消する旨が共有されています。SharePoint 2016 側でも「このパッチで解決した」という報告があり、まずは 該当の修正パッチ適用を最優先で検討するのが現実的です。

製品現象のきっかけになりやすい更新解消が期待される更新(報告ベース)狙い
SharePoint Server 2019KB5002639 および後続の更新KB5002771 / KB5002772DotNetAssembly/WebService の import/deploy 互換性を回復
SharePoint Server 2016同様の更新適用後に発生することがある(同パッチで解決したという報告あり)同上

SharePoint の更新適用は、単に KB をインストールするだけではなく、ファーム全体の整合性(ビルド番号の一致、構成のアップグレード)が重要です。復旧を急ぐほど手順を省略しがちですが、BCS のようにサービスアプリケーションが絡む領域では、結果的に遠回りになることが少なくありません。

パッチ適用の基本チェック(オンプレ運用の現実に寄せた手順)

  1. 影響範囲と停止許容を整理(外部リスト、外部データ列、検索クロール、連携バッチ、ユーザー影響)
  2. 検証環境があれば先に適用し、BDC モデル import と外部リスト表示、検索クロールを一通り確認
  3. 本番適用前に ファーム/DB のバックアップと、戻し手順(ロールバック手順)を用意
  4. ファーム内の全サーバーへ更新を適用(順序・同時適用のポリシーは運用に合わせる)
  5. 更新適用後に SharePoint 製品構成ウィザード(PSConfig)を実行し、構成をアップグレード
  6. 適用後、BDC モデルの import(既存・新規)と、外部リストの表示、検索クロールの正常化を確認

運用上、「すぐ直したい」ほど本番での一発勝負になりがちですが、BCS の復旧確認は“インポートが通った”だけでは不十分です。最低でも以下の 3 点はセットで確認してください。

  • BDC モデル(.bdcm)が import できる
  • 外部リストが実際にデータを取得できる(一覧表示・詳細表示・フィルタなど)
  • 検索クロール(対象にしている場合)がエラーなく進む

暫定回避:ServerDebugFlags に 57007(DotNetAssembly)/ 57008(WebService)を追加して許可する

「修正済みパッチを適用するまで待てない」「ただしロールバックも難しい」という状況では、暫定的に PowerShell で DotNetAssembly / WebService を再度許可する回避策が共有されています。SharePoint 2019 では「復旧した」という報告があり、実施後に IIS リセットまで行うケースが多いようです。

重要:この回避策は、環境・ビルド・既存設定により期待通りに動かない可能性があります。また、制限が入った背景がセキュリティ強化である場合、許可を戻すこと自体がリスクになり得ます。必ず検証環境で影響を確認し、恒久対応(修正パッチ適用)が完了したら設定を戻す前提で扱ってください。

実行前の準備

  • SharePoint 管理シェルで実行する(Farm 管理者権限)
  • 対象の BDC Service Application を特定する(ファームに複数ある場合に注意)
  • 現在の ServerDebugFlags 値を必ず控える(ロールバック用)

回避策の例(文字列で保持するパターンが多い場合)

$bdc = Get-SPServiceApplication | Where-Object { $_.TypeName -like "*Business Data Connectivity*" } | Select-Object -First 1
if (-not $bdc) { throw "BDC Service Application が見つかりません。" }

# 現在値を退避(必ずメモしておく)

$current = $bdc.Properties["ServerDebugFlags"]
Write-Host "Current ServerDebugFlags: $current"

# 追加したい値(報告ベース)

$add = @("57007","57008")

# 既存値に追記(重複は排除)

if ([string]::IsNullOrWhiteSpace([string]$current)) {
$new = ($add -join ",")
} else {
$list = ([string]$current) -split "," | ForEach-Object { $*.Trim() } | Where-Object { $* -ne "" }
$new  = ($list + $add | Select-Object -Unique) -join ","
}

$bdc.Properties["ServerDebugFlags"] = $new
$bdc.Update()

# 反映のため IIS リセット(運用影響に注意)

iisreset 

回避策の例(数値として保持している環境を想定し、ビット演算で追記するパターン)

$bdc = Get-SPServiceApplication | Where-Object { $_.TypeName -like "*Business Data Connectivity*" } | Select-Object -First 1
if (-not $bdc) { throw "BDC Service Application が見つかりません。" }

$current = $bdc.Properties["ServerDebugFlags"]
Write-Host "Current ServerDebugFlags: $current (Type: $($current.GetType().FullName))"

# 既存値が数値のときはビット演算で追加(環境によっては効かない場合があります)

$new = ([int]$current) -bor 57007 -bor 57008
$bdc.Properties["ServerDebugFlags"] = $new
$bdc.Update()

iisreset 

どちらの形式が正しいかは環境により異なり得ます。まずは 現在値の型(文字列か数値か)を確認し、同じ形式で変更するのが安全です。変更後は、BDC モデルの import → 外部リスト表示 → 検索クロールの順で復旧確認を行ってください。

「AllowList に追加する」案について

スレッド内には AllowList(SPSerializationCustomizedAllowList)へ追加する案も出ていますが、パラメータが不明瞭で、実際には「ほぼ何もしていないのでは」という指摘もあります。実施する場合は、本番に入れる前に検証環境で差分(実行前後で何が変わったか)を必ず確認してください。

それでも直らない場合にやるべきこと:サポート/ロールバック/方式変更を現実的に比較する

修正パッチの適用も回避策も効かない場合、あるいは環境制約でどちらも取れない場合は、選択肢を整理して「どこで折り合うか」を決める必要があります。おすすめは、次の優先順位で判断することです。

選択肢メリットデメリット/注意点向いている状況
Microsoft サポートへエスカレーション根本原因の調査・正式な修正ルートに乗せられる調査に時間がかかることがある/再現情報の準備が必要業務影響が大きく、暫定回避が許容できない
該当更新のロールバック更新前の状態に戻せる可能性があるセキュリティリスクが増える/戻した後の再適用計画が必要どうしても止められない業務で、短期的な復旧が最優先
DotNetAssembly/WebService を避けた方式へ移行今回のような制限変更の影響を受けにくくなる作り替えコストがかかる/要件・認証方式の見直しが必要継続運用を見据え、技術負債を減らしたい

ロールバックを選ぶ場合は、「戻す」までが作業ではなく「安全に再適用できる状態を作る」までがセットです。セキュリティ更新を外したまま運用を続けるのは、監査・事故対応の観点で後から必ず問題になりやすいため、短期の緊急避難として扱うのが現実的です。

方式変更を検討するなら:DotNetAssembly/WebService 依存を減らす設計の考え方

今回の事象は、「BCS が悪い」というより、“特定の BCS 実装(DotNetAssembly/WebService)が壊れやすい”ことを再認識させるタイプのトラブルです。将来の更新で同種の制限が再び入っても影響を最小化できるよう、方式変更を検討する価値があります。

選択肢概要メリット注意点
Database 型 BCS へ寄せる外部データを DB 側に寄せ、BCS は DB 接続に限定するシンプルで運用が安定しやすいDB 集約のための設計(ETL/同期/権限設計)が必要
OData 等の標準 API を介す外部システムの前段に API 層を置き、BCS は API 連携へ外部システム側の変更を吸収しやすい認証(Kerberos/Claims/証明書等)やネットワーク設計の難易度が上がることがある
BCS 以外の統合手段へ要件により、検索連携・アプリ連携・バッチ等へ置換する制限変更の影響を受けにくい設計を取りやすい外部リストの「SharePoint から透過参照」のUXが変わる可能性

「外部リストで一覧表示したい」要件は強い一方で、BCS は SharePoint の内部機構に依存します。今回のように更新によって挙動が変わると、業務影響が一気に顕在化します。長期運用するシステムほど、外部連携の責務を SharePoint から切り離す(疎結合にする)設計は効果が大きいです。

現場で使えるトラブルシュート手順(ログと確認コマンド)

原因が「制限変更」なのか「構成不整合」なのかを切り分けるために、次の順序で情報を集めると効率的です。

ログで確認するポイント

  • ULS に DotNetAssembly/WebService system type is not supported. が出ているか
  • Line: '4' Position: '6' のようにモデル先頭付近が指されているか(型チェックで落ちている可能性)
  • 検索クロールのログに BCS 起因の失敗が出ているか(外部データを対象にしている場合)

モデル側の確認(最短チェック)

  • .bdcm をテキストとして開き、Type="DotNetAssembly" / Type="WebService" を検索
  • 同時に、モデルが参照するアセンブリ名/エンドポイントが想定通りかも確認(更新適用で参照先が変わるわけではないが、切り分けのため)

SharePoint 管理シェルでの確認例

# BDC Service Application の有無を確認
Get-SPServiceApplication | Where-Object { $_.TypeName -like "*Business Data Connectivity*" } | Format-Table Id, DisplayName, TypeName

# BDC 関連サービスインスタンスの状態(環境により表示名は異なる)

Get-SPServiceInstance | Where-Object { $*.TypeName -like "*Business*" -or $*.TypeName -like "*BDC*" } | Format-Table Server, TypeName, Status 

BCS 周りは「サービスアプリケーション」「サービスインスタンス」「モデル(メタデータ)」が絡むため、どこか一つだけ見ても判断を誤りがちです。“更新直後から DotNetAssembly/WebService の import が落ちる”という状況が確認できれば、まずは修正パッチ適用(恒久対応)に寄せるのが最短です。

運用目線のまとめ:最短復旧の優先順位と判断基準

最後に、復旧を急ぐ現場で迷いがちなポイントを、意思決定しやすい形で整理します。

優先度やること狙い判断基準
KB5002771 / KB5002772(報告ベース)を適用し、PSConfig まで完走恒久的に互換性を戻すメンテナンス時間を確保できる/セキュリティ要件を満たしつつ直したい
ServerDebugFlags へ 57007/57008 を追加し、IIS リセット短期の業務復旧パッチ適用まで時間があるが、外部リスト停止が許容できない
Microsoft サポートへエスカレーション正式調査・修正暫定回避が効かない/再現・証跡を持って調査を進めたい
低(緊急避難)該当更新のロールバックとにかく戻す業務停止が致命的で、短期復旧が最優先(ただし再適用計画が必須)
計画対応DotNetAssembly/WebService を避けたモデルへ作り替え将来の更新耐性を上げる長期運用・技術負債解消を見据え、改修コストを取れる

BCS は「動いている間は便利」ですが、更新適用の影響が表面化すると、業務に直結して止まります。今回のケースでは、まず 修正済み更新の適用を軸にしつつ、どうしても待てない場合だけ ServerDebugFlags の暫定回避を使い、最終的には DotNetAssembly/WebService 依存を減らす設計へ寄せる——この順で考えると、復旧と再発防止のバランスが取りやすくなります。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次