有一个测试服务器使用测试数据库.我们在测试服务器上测试网站.如果没问题,我们会将网站和数据库架构从测试服务器更新到生产服务器.但这种方法非常痛苦且风险很大.
首先,我们必须将用户重定向到维护页面,因此网站暂停了一段时间.
其次,如果在更新时出现问题,我们必须回到旧网站,因为我们不能长时间将网站置于维护模式.
因此,我正在寻找一个可靠的解决方案来更新IIS网站和Sql Server数据库,而不会丢失数据并使用维护模式.有没有办法做到这一点?大型网站如何做到这一点,没有数据丢失和暂停.
我们曾想过使用候选发布网站.我们计划暂时使用这个RC网站.首先,我们更新RC站点,然后交换RC和生产网站之间的绑定.但这次数据库出了问题.因为我们可以更改数据库架构,而旧版本无法使用新数据库.因此,如果我们使用临时数据库的临时站点,则会丢失数据.此外,如果临时站点使用旧的生产数据库,则更新的网站将无法与旧数据库一起使用.所以我需要一个可靠的实用解决方案来解决这个问题.
sql-server iis updating web-deployment continuous-deployment
我在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变量中.但我还想不通.
我正在尝试使用Html Agility Pack突出显示 html 字符串中的文本。我可以用 替换文本<span class="highlight">,但是当我替换文本时,span 标记周围的空白消失了。例如,如果文本是"This text will be highlighted",则结果为"This text will be<span class='highlighted'>highlighted</span>",并且 span 标记之前的空格消失。这会将跨度之前和之后的单词与跨度文本合并。我只是做了一个这样的递归循环:
#text, 则node.InnerHtml = InnerText.Replace(search_term, span_code)然后我得到了InnerHtml结果HtmlDocument。<span我尝试在 之前和之后添加空格</span>,但它删除了它们。我试过了HtmlDocument.OptionWriteEmptyNodes = true;也没有用。我在创建之前和获取 html 字符串之后将 all"\n"和"\t"chars 替换为空格HtmlDocument,这两者都没有影响。
使用 Html Agility Pack 时如何保留空白?
我正在使用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方法以使"锁定"键到期.
有没有更好的解决方案,或者什么时候我们需要在多线程编程中获取像"锁定"块这样的锁.
我有一个实际上是字典的属性。我在这本字典中保留了很多类型,如 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 …
c# ×1
dehl ×1
delphi ×1
html-parsing ×1
iis ×1
json.net ×1
locking ×1
object ×1
redis ×1
servicestack ×1
sql-server ×1
timeout ×1
timespan ×1
updating ×1