次の方法で共有


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

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

トレースの有効化

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

既知の問題

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

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

問題

Add Adapter Service Reference Visual Studio プラグインまたは Consume Adapter Service 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 は他のアダプターのバインディングの読み込みに失敗します。

解決策

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

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

問題

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

原因

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

解決策

BizTalk Server 管理コンソールへの SQL アダプターの追加に関する記事で説明されている手順に従って、 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 操作の実行中にエラーコード=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 アダプターのタイムアウトを指定します。 <system drive>:\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 トランザクションのタイムアウト設定を指定します。 <system drive>:\WINDOWS\Microsoft.NET\Framework\<version>\CONFIG の下にある machine.config ファイルに移動し、次のような抜粋を追加します。

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

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

      Von Bedeutung

      この変更は、アダプター クライアントと 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. エラーで参照されているルード ノードを右クリックし、[ プロパティ] を選択します。

  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, ...  

原因

この警告は、SQL アダプター バインド sqlBindingは、Windows Communication Foundation (WCF) に付属している標準のバインドではないために表示されます。

解決策

この警告は無視しても問題ありません。

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

問題

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

原因

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

  • BizTalk Server プロジェクトで複数の通知スキーマを生成し、それを 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 アダプターのトラブルシューティング