我试图将数据写入MS数据库的FILESTREAM列。当在本地机器上运行它时,它可以正常工作,但是一旦连接到远程计算机,它就会锁定。
下面是我所做的(使用NHibernate):
private static readonly string QUERY_GET_PATH =
"select CompressedData.PathName() as path, GET_FILESTREAM_TRANSACTION_CONTEXT() as con from Data.TimeSeries where FS_ID = :dataId";
private static readonly string QUERY_SET_BLANK =
"update Data.TimeSeries set CompressedData = Cast('' as varbinary(max)) where FS_ID = :dataId";
// ...
ISession session = ...
var q1 = session.CreateSQLQuery(QUERY_SET_BLANK);
q1.SetGuid("dataId", ts.DataId);
q1.ExecuteUpdate();
var q2 = session.CreateSQLQuery(QUERY_GET_PATH);
q2.SetGuid("dataId", ts.DataId);
var results = q2.List();
var item = (object[])results[0];
var path = (string)item[0];
var context = (byte[])item[1];
return new SqlFileStream(path, context, FileAccess.Write); 在本地运行此操作很好,但随后我使用如下的连接字符串连接到远程数据库(这不是我的控制范围,我只需写到它):
Server=10.0.0.5; Database=TheDatabase; User Id=foo; Password='barfoo';返回的路径如下所示:
\\SOME-HOST\SOMEWHERE\v02-A60EC2F8-2B24-11DF-9CC3-AF2E56D89593\Foo\Data\TimeSeries\%!CompressedData\BAD566ED-CD86-42DE-AC71-D13125E89990\VolumeHint-HarddiskVolume1首先,我认为这是因为从10.0.0.5到SOME-HOST的名称解析,但是当向SOME-HOST文件中添加适当的条目(ping到数据库工作)时,它一直被锁定。
可能出什么事了?
后续行动
在等待了几分钟之后,我得到了一个带有消息Win32Exception的The user name or password is incorrect。
发布于 2018-04-05 07:10:57
我将此作为一个答案,这样我就可以将它标记为已解决的问题,尽管它更像是一种解决办法--但我希望至少在这里为可能面临相同或类似问题的其他人留下一个解释。
正如我所发现的,FILESTREAM仅适用于SSPI,而SSPI则只在客户机和服务器位于同一域中或在本地访问数据库时才能工作。这就解释了为什么当我在本地访问数据库时,它首先起作用了。
由于数据库服务器位于第三方与我们一起工作的系统中,所以我不能将我的客户端机器放到他们的域中,也不能将他们的服务器放到我们的域中。我们的解决办法是准备一切,将其压缩,将归档文件传输到数据库服务器,并在那里运行一个服务,在本地连接到数据库,将所有内容放入其中。从安全的角度来看,这是可以的,因为这两个系统只运行在一个本地网络,没有任何外部访问。
https://stackoverflow.com/questions/49132005
复制相似问题