次の方法で共有


SQL アダプターに関する操作上の問題のトラブルシューティング

このセクションでは、Microsoft BizTalk Adapter for SQL Serverを使用するときに発生する可能性がある操作エラーを解決するためのトラブルシューティング手法の使用について説明します。

トレースの有効化

SQL アダプターの使用中に発生した問題の詳細を収集するには、アダプター、WCF LOB アダプター SDK、およびSQL Server間のトレースを有効にする必要があります。 SQL アダプターでのトレースのサポートの詳細については、「SQL アダプターの 診断トレースとメッセージ ログ」を参照してください。

既知の問題

SQL アダプターの使用時に発生する可能性のある最も一般的なエラーと、その原因と解決策を次に示します。

アダプター バインドの読み込み中にエラーが発生しました

問題

アダプター サービス参照 Visual Studio プラグインまたはアダプター サービス BizTalk プロジェクト アドインの使用を開始しようとすると、次のエラーが表示されます。

There was an error loading the binding, <binding name>, from your system configuration.  
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.  

原因

アダプター サービス参照の追加プラグインまたはアダプター サービスアドインの使用を開始しようとすると、WCF は、インストールされているすべてのアダプターのアダプター バインドを読み込みます。 さらに、アダプター バインドは、エンタープライズ アプリケーションの特定のクライアント ソフトウェアに依存します。 この問題は、BizTalk アダプター パックに含まれるすべてのアダプターをインストールするアダプターの標準インストールまたは完全インストールを行った場合に発生する可能性があります。 ただし、LOB クライアント ライブラリは、1 つのエンタープライズ アプリケーションにのみインストールできます。 その結果、GUI は他のアダプターのバインドの読み込みに失敗します。

解像度

必要なアダプターのみをインストールするには、アダプターのカスタム インストールを行ってください。

SQL アダプターが、BizTalk Server管理コンソールのアダプターの一覧に表示されない

問題

BizTalk Server付属の以前のバージョンのアダプターとは異なり、BizTalk アダプター パックに付属する SQL アダプターは、BizTalk Server管理コンソールのアダプターの一覧に表示されません。

原因

最新の SQL アダプターは、WCF カスタム バインドです。 そのため、BizTalk Server管理コンソールにはWCF-Custom アダプターが表示されますが、WCF カスタム バインドは表示されないため、WCF ベースの SQL アダプターは表示されません。

解像度

sql アダプターをBizTalk Server管理コンソールに明示的に追加するには、「sql アダプターを管理コンソールに追加する」で説明されている手順BizTalk Server従います。

SQL Server データベースに対する操作の実行中にエラーが発生しました

問題

アダプターは、BizTalk Serverを使用してSQL Server データベースに対して操作を実行すると、次のエラーが発生します。

  • BizTalk Serverの場合

    System.ArgumentNullException: Value cannot be null.  
    

    原因

    メッセージの WCF アクションが指定されていません。 WCF では、すべての操作に対して SOAP アクションを指定する必要があります。これにより、LOB アプリケーションで実行される操作についてアダプターに通知されます。

    解像度

    送信ポートで SOAP アクションを指定するか、BizTalk オーケストレーションのメッセージ コンテキスト プロパティとして指定します。 手順については、「 SQL アダプターの SOAP アクションを構成する」を参照してください。 各操作のアクションの一覧については、「 メッセージとメッセージ スキーマ 」を参照してください。

FILESTREAM 操作の実行中に ErrorCode=5 を使用した InvalidOperationException

問題

SQL アダプターを使用して FILESTREAM 操作を実行しているときに、次のエラーが発生します。

System.InvalidOperationException: OpenSqlFileStream returned error.  
ErrorCode:5  
  

原因

SQL Server データベースに接続するためのデータベース資格情報を指定している可能性があります。 FILESTREAM 操作を実行するには、常に Windows 認証を使用する必要があります。 エラー コード "5" は、資格情報が正しくないためにアクセスが拒否されたことを示します。 さまざまなエラー コードの詳細については、「 システム エラー コード (0 から 499)」を参照してください。

解像度

Windows 認証を使用して、SQL Server データベースに接続します。 BizTalk Server管理コンソールでは、[WCF-Custom] または [WCF-SQL ポートの構成] ダイアログ ボックスでユーザー名とパスワードのフィールドを空白のままにすることで、これを行うことができます。

PollingStatement および PolledDataAvailableStatement に有効なステートメントが指定されている場合でも、ポーリング操作はメッセージを返しません

問題

PollingStatement および PolledDataAvailableStatement バインド プロパティに有効な値が指定されている場合でも、アダプターはSQL Serverからポーリング メッセージを受信しません。

原因

アダプターがポーリングしているテーブルに対して他のトランザクションがロックされているかどうかを確認します。

解像度

別のトランザクションの一部として更新されているテーブルをポーリングする場合は、PolledDataAvailableStatement バインド プロパティに指定されたクエリの一部として "with (nolock)" パラメーターを使用して、他のトランザクションによってロックが適用された場合でもデータが確実に返されるようにすることを検討できます。 詳細については、「 データベース エンジンでの SQL ロック」を参照してください。

アダプターは、BizTalk Serverを使用して、1 回の操作で大量のデータを挿入、更新、または削除できません

問題

SQL アダプターは、BizTalk Serverを使用して、1 回の操作で大量のデータを挿入、更新、または削除できません。

原因

大量のデータの挿入、更新、または削除には時間がかかり、操作が実行されている SQL アダプターまたはトランザクションがタイムアウトになる可能性があります。

解像度

  • BizTalk Serverの場合

    1. machine.configで WCF アダプターのタイムアウトを指定します。システム ドライブ>:\WINDOWS\Microsoft.NET\Framework<\version>\CONFIG の下<にあるmachine.config ファイルに移動し、次のような抜粋を追加します。

      <configuration>  
       <system.transactions>  
        <machineSettings maxTimeout="02:00:00" />  
       </system.transactions>  
      </configuration>  
      

      この設定では、WCF アダプターのタイムアウトは 2 時間に設定されます。

    2. machine.configで MSDTC トランザクションのタイムアウト設定を指定します。システム ドライブ>:\WINDOWS\Microsoft.NET\Framework<\version>\CONFIG の下<にあるmachine.config ファイルに移動し、次のような抜粋を追加します。

      <system.transactions>   
              <defaultSettings distributedTransactionManagerName="<computer_name>" timeout="02:00:00"/>   
          </system.transactions>  
      
      

      この設定では、MSDTC タイムアウトは 2 時間に設定されます。 MSDTC タイムアウトの既定値は 10 分です。

      重要

      アダプター クライアントとSQL Serverを実行しているコンピューターで、この変更を行う必要があります。 抜粋では、computer_name> をアダプター クライアントを実行しているコンピューターの名前に置き換え<、SQL Serverします。

    3. SQL アダプターの SendTimeout バインド プロパティをかなり大きな値に設定します。 バインド プロパティを設定する方法については、「 SQL アダプターのバインド プロパティを構成する」を参照してください。

DataSet を含む応答メッセージのBizTalk Serverでの完全なスキーマ検証が失敗する

問題

DataSet を含む応答メッセージ (ExecuteReader など) を返す操作の場合、BizTalk Serverで完全なスキーマ検証が失敗します。

解像度

データセットを含む応答メッセージに対して完全なスキーマ検証を行うことをお勧めします。 代わりに、以下を実行できます。

  1. スキーマを含む応答メッセージを返す操作を 1 回実行します。

  2. 応答メッセージから .xsd ファイルにスキーマをコピーし、このファイルを BizTalk プロジェクトに追加します。

  3. オーケストレーションで xpath クエリを使用して、応答メッセージからデータを抽出します。

BizTalk プロジェクトの RootNode TypeName に関するエラー

問題

Visual Studio の BizTalk プロジェクトで、アダプター サービス アドインを使用して生成されたスキーマに RootNode TypeName プロパティの無効な文字または予約語が含まれている場合、プロジェクトのコンパイル中に次のエラーが発生します。

Node <node reference> - Specify a valid .NET type name for this root node.  
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).  

解像度

  1. エラーで参照されている rood ノードを右クリックし、[プロパティ] を選択 します

  2. RootNode TypeName プロパティの場合は、無効な文字や予約語 (ドット (.) など) を削除します。

アダプターが一時テーブルを使用して厳密に型指定されたストアド プロシージャのメタデータを生成できない

問題

アダプターは、定義に一時テーブルを含む厳密に型指定されたストアド プロシージャのメタデータの生成に失敗します。 アダプターでは、次の例外が発生します。

Microsoft.ServiceModel.Channels.Common.MetadataException:  
Retrieval of Operation Metadata has failed while building WSDL at 'TypedProcedure/<schema>/<stored_procedure_name>' --->  
System.Data.SqlClient.SqlException: Invalid object name '<temp_table_name>'.  
  

解像度

SQL アダプターは、定義に一時テーブルを含む厳密に型指定されたストアド プロシージャのメタデータの生成をサポートしていません。 代わりに、アダプター サービス参照プラグインの追加またはアダプター サービス アドインの使用中に、同じプロシージャのメタデータを [ プロシージャ ] ノードから生成する必要があります。

Visual Studio でアダプターを使用するときのバインディング警告が無効です

問題

アダプターを使用して Visual Studio でアプリケーションを作成し、アダプターによって生成された構成ファイル (app.config) を開くと、次のような警告が表示されます。

The element 'bindings' has invalid child element 'sqlBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...  

原因

この警告が表示されるのは、 sqlBindingSQL アダプター バインド である が、Windows Communication Foundation (WCF) に付属している標準のバインドではないことが原因です。

解像度

この警告は無視してかまいません。

同じアプリケーションで複数の通知スキーマを使用する場合、または同じホスト上の複数のアプリケーションで通知スキーマを使用する場合、BizTalk Serverは例外をスローします

問題

BizTalk Serverは、複数のスキーマがメッセージの種類と一致したため、アプリケーションがドキュメント仕様を見つけることができないことを示す XLANG 例外または例外をスローします。

原因

これは、次のいずれかが原因で発生します。

  • BizTalk Server プロジェクトに複数の Notification スキーマを生成し、それをBizTalk Server アプリケーションに展開した後、アプリケーションを実行して、SQL Server データベースから通知を受信しました。 通知スキーマは一般的であるため、BizTalk Server アプリケーションにデプロイされているスキーマ間で競合が発生します。

  • 複数のプロジェクトの場合は、各BizTalk Server プロジェクトの通知スキーマを生成し、各プロジェクトを同じホスト上の個別のBizTalk Server アプリケーションにデプロイした後、アプリケーションまたはアプリケーションを実行して、SQL Server データベースから通知を受信しました。 スキーマとアセンブリは、BizTalk Serverのアプリケーション全体でアクセスできるため、さまざまなBizTalk Serverアプリケーションとアセンブリの下に展開される共通スキーマ間で競合が発生します。

    解像度

    BizTalk Server アプリケーションには、単一の通知スキーマ ファイルを使用します。 同じホスト上の複数のBizTalk Server アプリケーションで通知スキーマを使用する必要がある場合は、1 つの通知スキーマを含むアプリケーションを作成し、BizTalk Server内の他のすべてのアプリケーションの通知スキーマを使用します。

アダプター クライアントは、アダプター クライアントとSQL Server データベース間の接続が復元された後に操作を実行する際に例外をスローします

問題

アダプター クライアントは、SQL Server データベースで操作を実行すると、次の例外をスローします。

{System.Data.Common.DbException} = {"A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"}  

原因

操作の実行中、アダプターは SQL ADO.NET 接続プールからの接続を使用してSQL Server データベースに接続し、操作を実行します。 アダプター クライアントとSQL Server データベースの間でネットワークが短時間停止した場合、またはSQL Server データベースが一時的に停止している場合、SQL ADO.NET 接続プール内のすべての接続が無効になります。 接続が復元され、SQL Server データベースに対して操作を実行しようとすると、アダプターは SQL ADO.NET 接続プールから同じ無効な接続を使用するため、アダプター クライアントは例外をスローします。

解像度

アダプター クライアントは、操作の実行に再試行ロジックを実装する必要があります。ここで、例外をキャッチし、操作の再試行回数を "n+1" として指定します。ここで、"n" は MaxConnectionPoolSize バインド プロパティに指定された値です。 これは、無効にレンダリングされた接続プール内に "n" 個の接続がある場合、理論的にはアダプター クライアントが有効な接続を取得するために最大 "n+1" 回再試行し、そのため操作を実行する必要があることを意味します。

たとえば、BizTalk Serverで再試行回数を指定するには、アプリケーションで送信ポートの [プロパティ] ダイアログ ボックスを開き、ダイアログ ボックスの左側のウィンドウで [トランスポートの詳細オプション] をクリックし、[トランスポート オプション] 領域で [再試行回数] リストに値を指定します。

トランザクション受信操作でアダプターを使用すると、メモリ使用量とスレッド数が増加する

問題

ポーリングなどのトランザクション受信操作では、 ポーリング中のテーブルに使用可能なデータがなく 、アダプターがポーリングを続ける場合、一定期間にわたってメモリ使用量とスレッド数が増加します。

原因

ポーリング対象のテーブルに使用可能なデータがない場合、受信タイムアウト サイクルのたびに、Windows Communication Foundation (WCF) によって新しいスレッドが生成され、ポーリング操作が続行されます。 そのため、スレッド数とメモリ使用量は一定期間にわたって増加します。 ただし、ポーリングされるテーブルに何らかのデータがある場合、同じスレッドは後続のすべてのポーリングを実行し続けます。

解像度

ReceiveTimeout を最大値 (24.20:31:23.64700000 (24 日) ) に設定して、新しいスレッドが 24 日ごとに生成されるようにすることをお勧めします。 これにより、メモリ使用量とスレッド数が早すぎないようにします。

注意

SqlAdapterInboundTransactionBehavior が設定されている場合は、TransactionTimeout も最大値 (24.20:31:23.64700000 (24 日) に構成されていることを確認します。 この回避策を使用する場合は、トランザクション分離レベルを構成する必要がある場合にのみ、SqlAdapterInboundTransactionBehavior を追加できます。 それ以外の場合は、その動作を削除することをお勧めします。

ReceiveTimeout バインド プロパティの詳細については、「BizTalk Adapter for SQL Server アダプター バインド プロパティ」を参照してください。 バインド プロパティを指定する手順については、「 SQL アダプターのバインド プロパティを構成する」を参照してください。

注意

BizTalk Serverでアダプターを使用する場合、タイムアウトを大きな値に設定しても、アダプターの機能には影響しません。

参照

SQL アダプターのトラブルシューティング