【问题标题】:SQL Server 2008 Filestream Win32 error without a network cable!SQL Server 2008 Filestream Win32 错误,没有网线!
【发布时间】:2010-02-04 16:31:51
【问题描述】:

我有一个使用 Filestreaming 的 SQL Server 2008 数据库,除了在一个非常奇怪的情况下,所有的工作都很好。如果我在本地安装的 SQL Server 2008 版本上安装了数据库,比如笔记本电脑,并且连接到网络,一切正常。如果我拔下网络电缆,一段时间后 SqlFileStream 类无法初始化并出现 Win32 异常(有关连接到数据库的所有其他操作都可以正常工作)。如果我在没有网络电缆的情况下重新开始,它将不会出现同样的错误。如果我在没有网络连接的情况下插入网络电缆,它也可以工作......把它拿出来,什么都没有。

我正在以通常记录的方法连接到文件流

SqlFileStream fileStream = new SqlFileStream(path, 
                                             context, 
                                             FileAccess.ReadWrite,  
                                             FileOptions.SequentialScan, 
                                             0);

从存储过程中获取路径和上下文,在下面生成它们

SELECT Data.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT() 
  FROM dbo.DocumentFiles
 WHERE [File_ID] = @FileId

创建 SqlFileStream 实例时出现以下错误

发生 Win32Exception 网络 无法到达位置。更多 网络信息 疑难解答,请参阅 Windows 帮助。

没有内部异常。

我已经尝试了很多方法来解决这个问题,但都没有成功。谷歌领域似乎没有人遇到同样的问题,所以很明显我在做一些愚蠢的事情。如果有人能对此有所了解,我将不胜感激。

詹姆斯

【问题讨论】:

  • 您是否尝试将连接上的服务器更改为“。”
  • 是的,我尝试了很多不同的连接字符串组合。不同的网络库、用户类型、受信任的连接、服务器名称和实例……似乎更多的是权限问题。

标签: sql-server sql-server-2008 filestream


【解决方案1】:

嗯。当您拔下电缆时,您的网络接口似乎出现故障。当它发生时,TCP/IP 堆栈也会下降,因为没有更多可用的接口了。我建议你安装 MS Loopback 适配器,这个article 解释了如何在 Windows XP 中安装;谷歌很容易了解如何在其他操作系统中执行此操作。安装后别忘了给它分配一个静态 IP,像 192.168.1.x 这样的私有地址就足够了。由于环回适配器是虚拟的,因此它始终处于“启动”状态,即使您拔下电缆并且它会阻止 Windows 关闭 TCP 堆栈。

【讨论】:

  • 如果我使用命名管道作为网络库,还会出现这种情况吗?
  • 我按照说明操作(我在 ping 自己时返回了循环返回地址),现在一切正常。非常感谢您提供这个建议。这真是烦死我了!不过,这在 2008 年的 filestream 方法中似乎有点短板?
  • 不,我不认为这是 FileStream 方法的缺点,看起来您正在使用 TCP/IP 连接到 SQL server,并且当 TCP/IP 断开连接时也停止工作。难怪 SqlFileStream 无法检索任何数据,因此异常。我相信如果您开始使用共享内存或命名管道作为传输,您将不再需要 MS 环回适配器,但当然,您将能够连接到 SQL 服务器的本地实例。
  • 这很奇怪,因为我使用的是命名管道。这是我尝试在 tcp/ip、命名管道、共享内存之间进行更改的事情之一,这没有任何区别。再次感谢
  • 不客气,詹姆斯。我很高兴我的解决方案对您有所帮助,但它让我想知道 TCP/IP 如何影响共享内存 :)
猜你喜欢
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 2014-09-07
  • 2015-05-13
  • 2011-09-13
相关资源
最近更新 更多