小编oru*_*eis的帖子

无需停止即可更新生产IIS WebSite和SQL Server数据库

有一个测试服务器使用测试数据库.我们在测试服务器上测试网站.如果没问题,我们会将网站和数据库架构从测试服务器更新到生产服务器.但这种方法非常痛苦且风险很大.

首先,我们必须将用户重定向到维护页面,因此网站暂停了一段时间.

其次,如果在更新时出现问题,我们必须回到旧网站,因为我们不能长时间将网站置于维护模式.

因此,我正在寻找一个可靠的解决方案来更新IIS网站和Sql Server数据库,而不会丢失数据并使用维护模式.有没有办法做到这一点?大型网站如何做到这一点,没有数据丢失和暂停.

我们曾想过使用候选发布网站.我们计划暂时使用这个RC网站.首先,我们更新RC站点,然后交换RC和生产网站之间的绑定.但这次数据库出了问题.因为我们可以更改数据库架构,而旧版本无法使用新数据库.因此,如果我们使用临时数据库的临时站点,则会丢失数据.此外,如果临时站点使用旧的生产数据库,则更新的网站将无法与旧数据库一起使用.所以我需要一个可靠的实用解决方案来解决这个问题.

sql-server iis updating web-deployment continuous-deployment

8
推荐指数
1
解决办法
1561
查看次数

TVarData x86和x64 Delphi之间的差异

我在x64中找不到关于TVarData的任何解释.帮助中有一个页面,但似乎x64中的TVarData和x86中的TVarData不同.实际上我正在尝试为x64目标编译DEHL.但它在这一行上说"无效的类型转换":(来源是TVarData)

Big := TBigCardinalVarData(Source).BigCardinalPtr^;
Run Code Online (Sandbox Code Playgroud)

TBigCardinalVarData在这里:

TBigCardinalVarData = packed record
  VType: TVarType;
  Reserved1, Reserved2, Reserved3: Word;
  BigCardinalPtr: PBigCardinal;
  Reserved4: LongWord;
end;
Run Code Online (Sandbox Code Playgroud)

它在x86中编译,但它拒绝在x64中编译.我认为问题出在Word和LongWord变量中.但我还想不通.

delphi dehl

6
推荐指数
1
解决办法
413
查看次数

使用 HtmlAgilityPack 保留空白

我正在尝试使用Html Agility Pack突出显示 html 字符串中的文本。我可以用 替换文本<span class="highlight">,但是当我替换文本时,span 标记周围的空白消失了。例如,如果文本是"This text will be highlighted",则结果为"This text will be<span class='highlighted'>highlighted</span>",并且 span 标记之前的空格消失。这会将跨度之前和之后的单词与跨度文本合并。我只是做了一个这样的递归循环:

  1. 获取第一个子节点
  2. 如果节点是#text, 则node.InnerHtml = InnerText.Replace(search_term, span_code)
  3. 如果节点有子节点转到步骤1
  4. 转到下一个兄弟,然后转到步骤 1

然后我得到了InnerHtml结果HtmlDocument<span我尝试在 之前和之后添加空格</span>,但它删除了它们。我试过了HtmlDocument.OptionWriteEmptyNodes = true;也没有用。我在创建之前和获取 html 字符串之后将 all"\n""\t"chars 替换为空格HtmlDocument,这两者都没有影响。

使用 Html Agility Pack 时如何保留空白?

c# html-parsing html-agility-pack

5
推荐指数
1
解决办法
2644
查看次数

更新Redis键/值时获取锁定

我正在使用ServiceStack Redis中的AcquireLock方法更新并获取这样的键/值:

public virtual void Set(string key, T entity)
{
    using (var client = ClientManager.GetClient())
    {
        using (client.AcquireLock(key + ":locked", DefaultLockingTimeout, DefaultLockExpire))
        {
            client.Set(key, entity);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经扩展了AcqurieLock方法来接受锁定密钥到期的额外参数.所以我想知道我是否需要AcquireLock?我的类在Get <>,GetAll <>,ExpireAt,SetAll <>等每个操作中都使用AcquireLock.

但这种方法并不是每次都有效.例如,如果锁中的操作引发异常,则密钥保持锁定状态.对于这种情况,我已将DefaultLockExpire参数添加到AcquireLock方法以使"锁定"键到期.

有没有更好的解决方案,或者什么时候我们需要在多线程编程中获取像"锁定"块这样的锁.

timeout locking redis servicestack

4
推荐指数
1
解决办法
2万
查看次数

使用 Json.NET 在 Dictionary&lt;string, object&gt; 中序列化时间跨度

我有一个实际上是字典的属性。我在这本字典中保留了很多类型,如 TimeSpans、DateTimes 等。但是序列化和反序列化 TimeSpans 是错误的,它反序列化为字符串。

var dict = new Dictionary<string, object>();
dict.Add("int", 15);
dict.Add("string", "foo");
dict.Add("timeSpan", new TimeSpan(1,1,1));
dict.Add("dateTime", DateTime.Now);

var settings = new JsonSerializerSettings{
    TypeNameHandling = TypeNameHandling.All,
        TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple
};
var serializedObj = JsonConvert.SerializeObject(dict, Newtonsoft.Json.Formatting.Indented, settings);
var deserializedObj = (Dictionary<string, object>)JsonConvert.DeserializeObject(serializedObj, settings);
//Displaying the types with LinqPad:
deserializedObj["int"].GetType().Dump();
deserializedObj["string"].GetType().Dump();
deserializedObj["timeSpan"].GetType().Dump();
deserializedObj["dateTime"].GetType().Dump();
Run Code Online (Sandbox Code Playgroud)

结果: 对象类型

所以对象中的 TimeSpan 不能反序列化为一个时间跨度。我也尝试过最新版本的 Json.Net。但结果是一样的。

如何为 TimeSpan 指定类型名称?或者我应该编写一个自定义转换器以及如何编写?

编辑:

我做了一些测试,并像这样更改了序列化的 timeSpan 属性:

""timeSpan"": {
    ""$type"": ""System.TimeSpan"",
    ""$value"": ""01:01:01""}
Run Code Online (Sandbox Code Playgroud)

这一次 json.net 可以将其反序列化为 TimeSpan。但是如何在序列化级别指定 TimeSpan 的 $type 和 $value …

serialization timespan object json.net deserialization

2
推荐指数
1
解决办法
1839
查看次数