2016-03-22 8 views
1

WCF SQLアダプタを使用するポートを更新している最中にエラーが発生しました。SQLアダプタは、テーブルスキーマ。BizTalk 2010 WCF SQLアダプタとSQL Server 2014の互換性

アダプタは、URLでポートを送信しようとしてメッセージを送信するために "WcfSendPort_SqlAdapterBinding_TableOp_dbo_XXXXXXXX_Customを" 失敗 "MSSQL:// XXXXX // XXXXXX"。この送信ポートに指定された再試行間隔後に再送信されます。詳細:「Microsoft.ServiceModel.Channels.Common.XmlReaderGenerationException:コラムCUST_IDとBUSINESS_UNIT_ARは、いずれかの配列で重複したりしていない各列が一つだけの時間を選択することができ、列を順に選択する必要があります

。私は、WCFウィザードを経由してXSDスキーマを再生し、特定の列名

  • ためにに運

    1. アップデートで最新のBインストール
    2. を*からのSELECTリクエストオブジェクトを次のように試してみました私は誰もがこれを確認および/または示唆することができ多分のBizTalk 2010のWCF SQLアダプターは、SQL Server 2014と互換性がありません結論に来ています

    コアのインストールとアダプターの両方のためのT 2010の累積的な更新プログラムのパックはパック任意の回避策?現在、カスタムC#コンポーネントが必要になると思っていますし、近い将来BizTalkアップグレードを計画しています。ここで

    は、私は非常に単純な選択を実行しようとしているテーブル

    CREATE TABLE [dbo].[PS_PAC_CUSCLI_XREF](
        [SETID] [nvarchar](5) NOT NULL, 
        [CUST_ID] [nvarchar](15) NOT NULL, 
        [BUSINESS_UNIT_AR] [nvarchar](5) NOT NULL, 
        [PAC_M_CLIENTCD] [int] NOT NULL, 
        [ADDRESS_SEQ_NUM] [int] NOT NULL, 
        [PAC_M_ACCOUNT] [nvarchar](4) NOT NULL, 
        [PAC_M_SUNCODE] [nvarchar](10) NOT NULL, 
        [PAC_M_TAXCNTRY] [nvarchar](5) NOT NULL 
    ) ON [PRIMARY] 
    

    で、ここで私はそれが名前空間に2008を使用してだが、それは見ることができるメッセージ

    <ns0:Select xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/PS_PAC_CUSCLI_XREF" xmlns:array="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:ns3="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo"> 
        <ns0:Columns>SETID, CUST_ID, BUSINESS_UNIT_AR, PAC_M_CLIENTCD, ADDRESS_SEQ_NUM, PAC_M_ACCOUNT, PAC_M_SUNCODE, PAC_M_TAXCNTRY</ns0:Columns> 
        <ns0:Query>WHERE [CUST_ID] = '0000005341' and [ADDRESS_SEQ_NUM] =  1</ns0:Query> 
    </ns0:Select> 
    

    ですWCFインポートを使用して自動生成される方法

    送信ポートのバインディングは、スキーマ生成ツールで生成されるデフォルトの設定ですが、実際に必要な場合は追加できます(かなり大きいです)。

    SQLトレースを実行した後、select文のカラム順序が正しいことを確認しました。しかし、このSQLも実行され、テーブルスキーマを別の順序で返すように見えます。ここで

    exec sp_executesql N'SELECT sp.type AS [ObjectType], modify_date AS [LastModified] FROM sys.all_objects AS sp WHERE ([email protected] and SCHEMA_NAME(sp.schema_id)[email protected]);SELECT clmns.name AS [Name], usrt.name AS [DataType], SCHEMA_NAME(usrt.schema_id) AS DataTypeSchemaName, usrt.is_assembly_type AS [IsAssemblyType], clmns.is_identity AS [IsIdentity], ISNULL(baset.name, N'''') AS [SystemType], CAST(CASE WHEN baset.name IN (N''nchar'', N''nvarchar'') AND clmns.max_length <> -1 THEN clmns.max_length/2 ELSE clmns.max_length END AS int) AS [Length], CAST(clmns.[precision] AS int) AS [NumericPrecision], CAST(clmns.[scale] AS int) AS [NumericScale], clmns.is_nullable as [IsNullable], clmns.is_computed as [IsComputed], clmns.is_filestream as [IsFileStream], AT.assembly_qualified_name AS AssemblyQualifiedName, defCst.definition AS [DefaultValue] FROM sys.columns as clmns LEFT OUTER JOIN sys.default_constraints defCst on defCst.parent_object_id = clmns.object_id and defCst.parent_column_id = clmns.column_id LEFT OUTER JOIN sys.types AS usrt ON usrt.user_type_id = clmns.user_type_id LEFT OUTER JOIN sys.types AS baset ON baset.user_type_id = clmns.system_type_id and baset.user_type_id = baset.system_type_id LEFT JOIN sys.assembly_types AT ON AT.[name] = usrt.name AND AT.schema_id = usrt.schema_id WHERE clmns.object_id = (SELECT object_id FROM sys.objects o WHERE [email protected] and SCHEMA_NAME(o.schema_id)[email protected])',N'@ORIGINALOBJECTNAME nvarchar(18),@ORIGINALSCHEMANAME nvarchar(3)',@ORIGINALOBJECTNAME=N'PS_PAC_CUSCLI_XREF',@ORIGINALSCHEMANAME=N'dbo' 
    

    は、列の順序は、このクエリから返され

    • BUSINESS_UNIT_AR
    • PAC_M_ACCOUNT
    • PAC_M_SUNCODE
    • SETID
    • PAC_M_CLIENTCD
    • ADDRESS_SEQ_NUM
    • PAC_M_TAXCNTRY
    • CUST_ID

    Iはまた、ドロップし、テーブルを再作成し、再度投入するが、同じエラーが発生し、一時テーブルへデータを移動しようとしました。上記のステートメントで返される列の順序は異なるが、私が期待する順序ではない。 SQL 2008 DBで同じクエリを実行すると正しい順序でデータが返されるため、多分重要です。残念ながら、WCFアダプタのソースコードに埋め込まれているので、それについて何かできることはわかりません。

    +1

    実行中のテーブルは何ですか?生成された実際のSQL文をキャプチャするためにSQLプロファイラを実行しようとしましたか?実際のリクエストメッセージがあれば投稿できますか?あなたはテーブル定義(またはこれを再現するもの)を投稿できますか? –

    +0

    また、送信ポートバインディングを含めるようにしてください。 –

    +0

    返信いただきありがとうございます。 SQLプロファイラについての良いアイデアは、それが何かを示しているかどうかを知るでしょう。テーブルスキーマとリクエストXMLが含まれています。送信ポートのバインディングはかなり大きいので、それを含めていませんが、かなり大量の標準WCF-Custom sql sendポートです。 –

    答えて

    0

    BizTalk 2010自体はSQL Server 2014と互換性がありますが、公式のアダプタパックで提供されるSQLアダプタは、少なくともSELECT操作ではないことを証明できたと思います。ここ

    は、いくつかの代替ソリューション

    • 例えば、アプリケーションからのWebサービスのデータを抽出する別のメカニズムを使用し
    • 代わりにストアドプロシージャを使用しています。とにかくベストプラクティスなので、これは私がやったことです。
    • のBizTalk 2013またはSQLアダプタがUPDATE操作のために正常に動作しなかったことを注意

    上記のアップグレード。

    関連する問題