BizTalk WCF-CUSTOM Sqlbinding生成从字符串到字节[]的类型转换错误
我正在将BizTalk 2010解决方案迁移到BizTalk 2016。所有内容都已大量复制和粘贴,因此没有任何更改,2010版也可以正常工作,但当我向WCF-CUSTOM端口发送消息时(sqlbinding to Storage procedures),它会停止并记录从字符串到字节[]的类型转换错误 我试着在2010年的部署中传达同样的信息,这很好,但在2016年就不行了。我尝试用存储过程生成的模式创建另一个简单的编排,它也会产生错误,请参见下文 适配器无法传输发送端口WcfSendPort_SqlAdapterBinding_TypedProcedures_dbo_Custom的消息,URL为mssql://*****。它将在为此发送端口指定的重试间隔后重新传输。详细信息:System.InvalidCastException:无法将参数值从字符串转换为字节[]。-->System.InvalidCastException:从“System.String”到“System.Byte[]”的转换无效。 在System.Convert.DefaultToTypeIConvertible值中,键入targetType,IFormatProvider 在System.Data.SqlClient.SqlParameter.ImpresseValueObject值、元类型destinationType、Boolean&ImpressedToDataFeed、Boolean&typeChanged、Boolean allowStreaming中 -内部异常堆栈跟踪的结束-- 服务器堆栈跟踪: 在System.Runtime.AsyncResult.End[TAsyncResult]IAsyncResult结果 位于System.ServiceModel.Channel.ServiceChannel.SendAsyncResult.EndSendAsyncResult 在System.ServiceModel.Channels.ServiceChannel.EndCallString操作中,对象[]输出,IAsyncResult结果 在System.ServiceModel.Channels.ServiceChannel.EndRequestIAsyncResult结果中 在[0]处重试异常: 在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessageIMessage reqMsg、IMessage retMsg 在System.Runtime.Remoting.proxy.RealProxy.PrivateInvokeMessageData和msgData中,Int32类型 在System.ServiceModel.Channels.IRequestChannel.EndRequestIAsyncResult结果中 在Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.RequestCallbackIAsyncResult结果中 它应该发送的消息是 这是存储的进程BizTalk WCF-CUSTOM Sqlbinding生成从字符串到字节[]的类型转换错误,biztalk,biztalk-2016,Biztalk,Biztalk 2016,我正在将BizTalk 2010解决方案迁移到BizTalk 2016。所有内容都已大量复制和粘贴,因此没有任何更改,2010版也可以正常工作,但当我向WCF-CUSTOM端口发送消息时(sqlbinding to Storage procedures),它会停止并记录从字符串到字节[]的类型转换错误 我试着在2010年的部署中传达同样的信息,这很好,但在2016年就不行了。我尝试用存储过程生成的模式创建另一个简单的编排,它也会产生错误,请参见下文 适配器无法传输发送端口WcfSendPort_
CREATE PROCEDURE [dbo].[***]
(
@BatchId BIGINT OUTPUT,
@BatchGuid VARCHAR(50) = NULL,
@Contract VARCHAR(50) = NULL,
@Initiating***Id BIGINT = NULL,
@LinesExpected INT = NULL,
@LinesProcessed INT = NULL,
@SourceSystemMessageId VARCHAR(50) = NULL,
@SourceSystemName VARCHAR(50) = NULL,
@CreatedBy NVARCHAR(255) = NULL,
@RowId TIMESTAMP = 0x00000000000007D9 OUTPUT
)
AS
SET NOCOUNT ON
if @BatchGuid is NULL
set @BatchGuid = ''
if @Contract is NULL
set @Contract = ''
if @Initiating***Id is NULL
set @Initiating***Id = 0
if @LinesExpected is NULL
set @LinesExpected = 0
if @LinesProcessed is NULL
set @LinesProcessed = 0
if @SourceSystemMessageId is NULL
set @SourceSystemMessageId = ''
if @SourceSystemName is NULL
set @SourceSystemName = ''
if @CreatedBy is NULL
set @CreatedBy = ''
INSERT INTO dbo.[***]
(
[BatchGuid],
[Contract],
[Initiating***Id],
[LinesExpected],
[LinesProcessed],
[SourceSystemMessageId],
[SourceSystemName],
[CreatedBy],
[CreatedDate]
)
VALUES
(
@BatchGuid,
@Contract,
@Initiating***Id,
@LinesExpected,
@LinesProcessed,
@SourceSystemMessageId,
@SourceSystemName,
@CreatedBy,
getdate()
)
SELECT @BatchId = Scope_Identity()
SELECT @RowId = RowId FROM [***]
WHERE [BatchId] = @BatchId
SET NOCOUNT OFF
RETURN
GO
请注意***只是在掩盖敏感信息结果表明问题是由于rowId参数中的空值造成的。BizTalk 10处理空值的方式似乎有所不同 您是否尝试过将发送管道更改为passthrough?@Jason Hoyle,您是否在架构生成期间也启用了EnableBizTalkCompatibilityMode?@metal嗨,是的,我尝试过,但它产生了相同的结果error@r3verse是的,这是为两个参数设置的。问题参数的DbType是什么?从技术上讲,是NetFx的新XslTransform类导致了这一问题: