小编MaY*_*YaN的帖子

具有主动/主动粘滞会话的SignalR和负载平衡

我们有一个使用SignalR更新客户端UI的应用程序,目前应用程序托管在我们维护的IIS上,我们的客户端直接向我们发送.

然而,我们正在将其整合到一个企业范围的框架中,该框架将容纳我们的应用程序,我们将继续托管应用程序,但是登陆我们页面的任何人都将通过我们被告知的负载平衡策略"每个区域的2个网关服务器设置为具有粘性会话的主动/主动"

我的问题是,当SignalR决定选择长轮询作为传输协议并以某种方式断开连接时,我们是否会遇到任何问题?

抱歉,我对Load Balancing的主题并不了解.

任何帮助都非常赞赏.

asp.net iis load-balancing signalr

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

如何使用取消令牌取消 C# 中的阻塞任务?

我有一个总是被阻止的任务,我有一个 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 服务流数据)所以我不得不调用它在另一个线程上。

取消任务的最佳方法是什么?

c# task-parallel-library cancellation-token

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

使用ServiceStack OrmLite时,为什么会出现"从范围引用但未定义的变量"错误?

我有一个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也可以正常工作.

有任何想法吗?

c# ormlite-servicestack

5
推荐指数
0
解决办法
585
查看次数

从 MD5 散列而不是字符串创建 Guid 是否有效?

我正在尝试实现一种检测重复文件的方法。我有一个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)

它仍然有效还是会失去唯一性?

.net c# hash md5

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

如何在 C# 中解密由 des.exe 加密的文件?

我有一个已由des.exe加密的文件。

\n\n

可以使用以下命令对文件进行加密和解密:

\n\n
des -E -k "foo" sample.txt sample.txt.enc\ndes -D -k "foo" sample.txt.enc sample.txt.dec\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试使用以下方法解密:

\n\n
public 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)

.net c# encryption cryptography des

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

为什么在堆上创建的堆栈类型和引用类型上创建了值类型?

编程语言书籍通常解释在堆栈上创建值类型,并在堆上创建引用类型.

我的问题是为什么.

.net value-type reference-type

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

如何在OrmLite ServiceStack中增加命令超时?

我正在使用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在默认超时的秒后超时.

有任何想法吗?

.net c# sql-server connection-string ormlite-servicestack

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

为什么我无法将 ServiceStack Ormlite 连接转换为 SqlConnection?

我正在尝试使用SqlBulkCopyServiceStack 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)

.net c# sqlconnection ormlite-servicestack

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

如何在扩展方法中使用'continue'和`break`?

我已经定义了以下扩展方法:

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)

我希望能够利用continuebreak扩展我的扩展方法,以便我可以这样做:

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)

.net c# morelinq

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

Aurelia中<compose>和<require>有什么区别?

在学习这个令人敬畏的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)

任何澄清表示赞赏.

aurelia aurelia-framework

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