2016-03-22 18 views
1

SQL 2008 ile her zaman gayet iyi çalışmış olan bir WCF SQL bağdaştırıcısını kullanan bir bağlantı noktasını güncelleştirirken, aşağıdakiyle aynı hatayı (çok basit) bir SQL 2014 DB'sini güncellerken hata alıyorum tablo şeması. BizTalk 2010 WCF SQL Server 2014 ile SQL bağdaştırıcısı uyumluluğu

adaptör

URL ile liman "WcfSendPort_SqlAdapterBinding_TableOp_dbo_XXXXXXXX_Custom" göndermek için ileti gönderirken başarısız oldu "mssql: // XXXXX // XXXXXX". Bu Gönderme Noktası için belirtilen yeniden deneme aralığından sonra yeniden iletilecektir. Ayrıntılar: "Microsoft.ServiceModel.Channels.Common.XmlReaderGenerationException: sütunlar CUST_ID ve BUSINESS_UNIT_AR ya çoğaltılmış veya bir dizi her bir sütun, yalnızca bir kez seçilebilir ve sütun dizisi seçilmelidir edilir

.. Ben en son B Yüklü hiçbir şans

  1. Güncelleme WCF Sihirbazın
  2. aracılığıyla XSD şemaları Rejenere sırayla
  3. belirli sütun adları * dan SEÇ istek nesnesi ile aşağıdaki denedim Herkes bu onaylamak ve/veya önerebilir belki BizTalk 2010 WCF SQL adaptör SQL Server 2014 ile uyumlu olmayan sonuca geliyorum

çekirdek kurulumu ve adaptör hem T 2010 toplu güncelleştirme paketleri paketleri herhangi bir geçici çözüm var mı? Şu anda özel bir C# bileşenine ihtiyacım olacağını ve yakın gelecekte bir noktada bir BizTalk yükseltmesi planlayacağımı düşünüyorum. İşte

tablo

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] 

select çok basit yürütmek çalışıyorum burada, ben ad alanında 2008 kullanıyor görebilirsiniz mesajı

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

olmakla olmasıdır WCF içe aktarma kullanılarak otomatik olarak nasıl üretilir.

Gönderme bağlantı noktası bağlama, şema oluşturma aracı tarafından oluşturulan varsayılan değerdir, ancak gerçekten ihtiyacınız varsa ekleyebilir (oldukça büyüktür!).

Bir SQL izlemesi çalıştırdıktan sonra select deyiminin doğru sütun sırasına sahip olduğunu doğruladım. Ancak, bu SQL de, tablo şemasını farklı bir sırayla döndürecek gibi görünüyordu.İşte

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' 

sütunların sırasının bu sorgudan döndürülen olduğunu

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

Ayrıca bırakarak ve tablo yeniden ve yeniden doldurulması, aynı hata oluştuğunda, geçici bir tabloya veri taşıma çalıştı. Yukarıdaki ifadede döndürülen sütunların sırası farklıdır, ancak bekleyeceğim sıra değildir. SQL 2008 DB'deki aynı sorgu, verileri doğru sırayla döndürür, bu nedenle önemli. Ne yazık ki, WCF adaptörünün kaynak koduna gömülecek ve bu konuda yapabileceğim bir şey olmadığından emin olamayacaksınız.

+1

Hangi tabloları çalıştırıyorsunuz? Oluşturulmakta olan gerçek SQL ifadesini yakalamak için SQL Profiler'i çalıştırmayı denediniz mi? Varsa gerçek istek mesajını gönderebilir misin? Tablo tanımını (veya bunu yeniden üretecek olan) gönderebilir misiniz? –

+0

Ayrıca, gönderme bağlantı noktanızın bağlanmasını da deneyin. –

+0

Yanıt için teşekkürler. SQL profiler hakkında iyi bir fikir, bunun bir şey gösterip göstermediğini görecek. Tablo şeması ve istek XML şimdi dahil edilmiştir. Gönderme bağlantı noktası bağlama oldukça büyüktür, bu yüzden dahil etmediniz, ancak oldukça standart bir WCF-Custom sql gönderme bağlantı noktasıdır. –

cevap

0

Bu yüzden, BizTalk 2010'un SQL Server 2014 ile uyumlu olmasına rağmen, resmi bağdaştırıcı paketindeki teslim edilen SQL bağdaştırıcısının en azından SELECT işlemleri için geçerli olmadığını ispatlamayı başardım.

Burada

  • örneğin uygulamadan bir web hizmeti veri ayıklamak için bir saklı prosedür yerine
  • kullanımlar farklı mekanizma kullanarak alternatif çözümler vardır. Muhtemelen en iyi uygulama olduğu için yaptığım buydu.
  • Yükseltme BizTalk 2013 veya SQL adaptör UPDATE işlemi için çalışma cezası yaptığını

Not üzerindedir.