Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net BizTalk在接收适配器和管道之间引发NullReferenceException_.net_Biztalk_Nullreferenceexception_Biztalk 2009 - Fatal编程技术网

.net BizTalk在接收适配器和管道之间引发NullReferenceException

.net BizTalk在接收适配器和管道之间引发NullReferenceException,.net,biztalk,nullreferenceexception,biztalk-2009,.net,Biztalk,Nullreferenceexception,Biztalk 2009,我开发了一个BizTalk管道,虽然它在开发虚拟机上运行良好,但在生产环境中却不能。这两种环境都运行BizTalk Server 2009 我的管道中的所有组件在其他管道上都可以正常工作。我得到的例外情况是,在Windows应用程序事件日志中(在之间的所有内容都是无关的): 接收位置上具有URI的适配器“文件”接收到的消息被挂起。 错误详细信息:执行接收管道时失败:源:“未知”接收端口:URI:原因:对象引用未设置为对象的实例。 MessageId: 实例ID: 我知道,没有执行任何组件,因为第

我开发了一个BizTalk管道,虽然它在开发虚拟机上运行良好,但在生产环境中却不能。这两种环境都运行BizTalk Server 2009

我的管道中的所有组件在其他管道上都可以正常工作。我得到的例外情况是,在Windows应用程序事件日志中(在
之间的所有内容都是无关的):

接收位置上具有URI的适配器“文件”接收到的消息被挂起。 错误详细信息:执行接收管道时失败:源:“未知”接收端口:URI:原因:对象引用未设置为对象的实例。
MessageId:
实例ID:

我知道,没有执行任何组件,因为第一个组件将某些内容写入自定义跟踪应用程序的数据库。这种情况不会发生在该管道上,并且相同的组件适用于使用它的所有其他管道

我的管道上的所有组件也用于其他管道,没有一个会出现这种问题

因此,这个异常实际上发生在适配器和管道之间。最初,使用的适配器是带有
sqlBinding
WCF自定义
,但使用
文件
适配器会导致相同的异常

现在,事件日志条目是我对通过此管道的所有消息的唯一跟踪。没有挂起的实例。当我使用默认的PassThrough或XMLReceive管道时,它就可以工作了

我该怎么办?有什么不对劲?
有没有办法为这个异常获取某种类型的stacktrace来帮助跟踪它?

出于绝望,我开始一次又一次地部署管道,每次都不使用不同的组件,直到我找到了罪魁祸首


事实证明,我的本地开发VM(和Visual Studio)从GAC中取出了一个组件,而不是标准的
C:\Program Files(x86)\Microsoft BizTalk Server 2009\Pipeline components
文件夹。此程序集与生产环境中的组件不匹配。

如果使用直通管道,消息框中是否会出现消息?组件是否直接对流执行任何工作?@boatseller我尝试过使用XMLReceive管道,它是这样工作的。组件确实在流上进行操作,但正如我所说的,这不会给与组件共享的其他管道带来问题。您能否确保自定义管道所需的所有DLL都是gac的。我在映射方面遇到了类似的问题。@位掩码管道程序集本身肯定是gac'd。自定义组件不必是afaik,因为它适用于其他管道。此外,如果这是问题所在,那么错误将更具体地说明无法加载程序集(在以前的情况下是这样的)。无论如何,谢谢你的想法。不!等待住手!;)所有自定义管道组件应仅位于GAC中,而不是管道组件文件夹中。Pipeline Components文件夹是BizTalk Server 2004的兼容性痕迹,不应使用。BizTalk Server 2006中引入了GAC支持,因此管道组件应该与所有其他BizTalk程序集一起使用。@boatseller我恐怕永远也无法说服我的同事现在就转换,我打赌他们不知道这一点(我从他们那里学到了一切)。传统方法仍然有效,因此我们不能冒险切换。我知道这会给你带来麻烦。但是谢谢你现在让我来,我一定会记得的@boatseller Microsoft在此处则表示“所有.NET管道组件程序集(本机和自定义)必须位于\pipeline Components文件夹中,服务器才能执行。您不需要将BizTalk运行时使用的自定义管道组件添加到全局程序集缓存(GAC)。”此外,还存在一个gotcha()在将其添加到开发环境中之前,必须将其保存在pipelines组件文件夹中。但是,如果您正在使用BizTalk部署框架,您可能确实希望对其进行GAC。这是一场长期的争论:——)@Dijkgraaf似乎我所做的或多或少与你链接到的博客帖子中所发生的事情相反。我把它放在开发机器上,但不放在生产环境中。在我的VM中交换引用时,我根本无法打开管道,这就是空引用出现的地方:它发生在尝试读取rogue组件上的
PropertyBag
时。我必须用xml编辑器打开它,删除组件的所有用法,并用适当的引用集重新添加它们。