我们有一个使用SignalR更新客户端UI的应用程序,目前应用程序托管在我们维护的IIS上,我们的客户端直接向我们发送.
然而,我们正在将其整合到一个企业范围的框架中,该框架将容纳我们的应用程序,我们将继续托管应用程序,但是登陆我们页面的任何人都将通过我们被告知的负载平衡策略"每个区域的2个网关服务器设置为具有粘性会话的主动/主动"
我的问题是,当SignalR决定选择长轮询作为传输协议并以某种方式断开连接时,我们是否会遇到任何问题?
抱歉,我对Load Balancing的主题并不了解.
任何帮助都非常赞赏.
我有一个总是被阻止的任务,我有一个 CancellationToken 传递给它,用于取消任务。然而,设置为在任务取消时执行的继续任务永远不会执行。代码是:
_tokenSrc = new CancellationTokenSource();
var cnlToken = _tokenSrc.Token;
Task.Run(() =>
// _stream.StartStream() blocks forever
_stream.StartStream(), cnlToken)
.ContinueWith(ant =>
{
_logger.Warn("Stream task cancellation requested, stopping the stream");
_stream.StopStream();
_stream = null;
_logger.Warn("Stream stopped and task cancelled");
}, TaskContinuationOptions.OnlyOnCanceled);
Run Code Online (Sandbox Code Playgroud)
稍后在代码中的其他地方......
_tokenSrc.Cancel();
Run Code Online (Sandbox Code Playgroud)
我不得不为 _stream.StartStream() 使用 Task 的原因是这个调用永远阻塞(一个我无法控制的 api,请注意 _stream 指的是一个第三方 Api,它从 web 服务流数据)所以我不得不调用它在另一个线程上。
取消任务的最佳方法是什么?
我有一个SQL Server表Employee,其列EntryDate定义为DATETIME.
我也有以下poco:
public class Employee
{
public int Id {get; set;}
public DateTime EntryDate {get; set;}
...
}
Run Code Online (Sandbox Code Playgroud)
当我使用以下方式查询表时:
Db.Select<Employee>(e => e.EntryDate >= new DateTime(2014, 8, 15));
Run Code Online (Sandbox Code Playgroud)
要么:
Db.Select<Employee>(q => q.Where(e => e.EntryDate >= new DateTime(2014, 8, 15)));
Run Code Online (Sandbox Code Playgroud)
我得到了我的期望,但是当我尝试运行时:
Db.Select<Employee>(e => e.EntryDate.Date >= new DateTime(2014, 8, 15).Date));
Run Code Online (Sandbox Code Playgroud)
要么:
Db.Select<Employee>(q => q.Where(e => e.EntryDate.Date >= new DateTime(2014, 8, 15).Date));
Run Code Online (Sandbox Code Playgroud)
我明白了:
从范围''引用的'Employee'类型的变量'e',但它没有定义
只是为了确认,编写原始SQL也可以正常工作.
有任何想法吗?
我正在尝试实现一种检测重复文件的方法。我有一个MD5散列方法(让我们忽略MD5已损坏的事实)如下:
using(MD5 hasher = MD5.Create())
using(FileStream fs = File.OpenRead("SomeFile"))
{
byte[] hashBytes = hasher.ComputeHash(fs);
string hashString = string.Join(string.Empty, hashBytes.Select(x => x.ToString("X2")));
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样简单地从它中创建一个string,而不是hashBytes从中创建一个Guid吗?
Guid hashGuid = new Guid(hashBytes);
Run Code Online (Sandbox Code Playgroud)
它仍然有效还是会失去唯一性?
我有一个已由des.exe加密的文件。
\n\n可以使用以下命令对文件进行加密和解密:
\n\ndes -E -k "foo" sample.txt sample.txt.enc\ndes -D -k "foo" sample.txt.enc sample.txt.dec\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试使用以下方法解密:
\n\npublic byte[] Decrypt(FileInfo file, string key)\n{\n byte[] keyAsBytes = LibDesPasswordConvertor.PasswordToKey(key);\n byte[] initializationVector = keyAsBytes;\n\n var cryptoProvider = new DESCryptoServiceProvider(); \n cryptoProvider.Mode = CipherMode.CBC;\n cryptoProvider.Padding = PaddingMode.None; \n\n using (FileStream fs = file.OpenRead())\n using (var memStream = new MemoryStream())\n using (var decryptor = cryptoProvider.CreateDecryptor(keyAsBytes, initializationVector))\n using (var cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Write))\n {\n fs.CopyTo(cryptoStream);\n fs.Flush();\n cryptoStream.FlushFinalBlock();\n\n return memStream.ToArray();\n }\n}\n\npublic static …Run Code Online (Sandbox Code Playgroud) 编程语言书籍通常解释在堆栈上创建值类型,并在堆上创建引用类型.
我的问题是为什么.
我正在使用ServiceStack OrmLite SqlServer v3.9.71并具有以下连接字符串:
<add key="ConnStr" value="Data Source=my-db;Initial Catalog=Users;Integrated Security=SSPI;Connection Timeout=666"/>
Run Code Online (Sandbox Code Playgroud)
并使用以下命令运行查询,需要2-3分钟才能返回:
using (Db)
{
var result = new ResultDto();
Parallel.Invoke(
() => { result.StatOne = Db.Dictionary<DateTime, int>(query1); },
() => { result.StatTwo = Db.Dictionary<DateTime, int>(query2); }
);
return result;
}
Run Code Online (Sandbox Code Playgroud)
当在Db对象上放置一个断点时,我可以看到连接超时,666但我无法弄清楚如何在每次运行上面时设置/增加命令超时它30在默认超时的秒后超时.
有任何想法吗?
我正在尝试使用SqlBulkCopy并ServiceStack Ormlite编写了以下扩展方法:
public static void BulkInsertSqlServer<T>(this IDbConnection dbConn, string targetTable, IEnumerable<T> data, params string[] columns)
{
Ensure.NotNull(dbConn);
Ensure.That(dbConn.State == ConnectionState.Open);
Ensure.NotNullOrEmptyOrWhiteSpace(targetTable);
Ensure.NotNull(data);
Ensure.NotNullOrEmpty(columns);
var sqlConnection = dbConn as SqlConnection;
using (var bcp = new SqlBulkCopy(sqlConnection))
using (var reader = ObjectReader.Create(data, columns))
{
bcp.BatchSize = data.Count();
bcp.DestinationTableName = targetTable;
bcp.WriteToServer(reader);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的:
_connFactory = new OrmLiteConnectionFactory(connStr, SqlServerOrmLiteDialectProvider.Instance);
using (var db = _connFactory.Open())
using (var tran = db.BeginTransaction())
{
db.BulkInsertSqlServer("User", users, "Name", "Age");
var allRoles = new …Run Code Online (Sandbox Code Playgroud) 我已经定义了以下扩展方法:
public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{
foreach (T obj in sequence)
{
action(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以用它作为:
new [] {1, 2, 3} // an IEnumerable<T>
.ForEach(n =>
{
// do something
});
Run Code Online (Sandbox Code Playgroud)
我希望能够利用continue和break扩展我的扩展方法,以便我可以这样做:
new [] {1, 2, 3}
.ForEach(n =>
{
// this is an overly simplified example
// the n==1 can be any conditional statement
// I know in this case I could have just used .Where
if(n == 1) { continue; …Run Code Online (Sandbox Code Playgroud) 在学习这个令人敬畏的Aurelia框架时,我了解到你可以使用以下组合技术但是我不确定会有什么区别.
<compose view="./nav-bar.html"></compose>
Run Code Online (Sandbox Code Playgroud)
要么
<require from="./nav-bar.html"></require>
Run Code Online (Sandbox Code Playgroud)
任何澄清表示赞赏.
c# ×7
.net ×6
asp.net ×1
aurelia ×1
cryptography ×1
des ×1
encryption ×1
hash ×1
iis ×1
md5 ×1
morelinq ×1
signalr ×1
sql-server ×1
value-type ×1