我遇到了很多问题,因为我的用户使用多个浏览器的选项卡来使用同一个应用程序。
问题是每个选项卡都将与服务器建立单独的连接以启动服务器发送的事件,并且服务器将运行一个循环来完成请求。(如果每个用户打开了 5 个选项卡,那么服务器将不得不启动 5 个不同的服务器发送事件来响应!)
有没有办法添加某种逻辑来检查客户端和服务器发送的脚本之间是否建立了连接,使用相同的连接而不是创建新的连接?
我认为这与使用 WebSocket 的想法相同。但是,我使用 WebSockets 的问题是每个用户都必须使用服务器发送的事件进行身份验证,并且不确定 WebSockets 是否可以做到这一点。当用户登录到应用程序时,我会生成一个 sessionID,并且在允许他们使用该站点之前,会话会检查他们的 IP/代理数据是否匹配。
如何将与服务器发送事件的连接最小化为每个用户 1 个?
我有一个包含多个复选框组的表单.
每个复选框选项都有一个名为的自定义html 5属性itemtype.当type ="checkbox"的输入发生变化时,我需要评估刚刚选中的复选框.如果它的data-itemtype值等于'Skipper',我想取消选中属于同一组的所有其他复选框.
换句话说,假设我有多个复选框,其中一个复选框选项有一个名为"None"的标签,如果用户选中"None",则应该选择Nothing但是"None".我不能在这里使用单选按钮,因为如果没有选择"无",我希望用户能够检查多个选项.
这是我的代码细分
CHECKBOX GROUP 1
<input name="control_307[0][307:1003]" id="item_307_1003_0" value="307:1003" data-itemtype="Answer" type="checkbox"> Zulauf Ltd<br>
<input name="control_307[0][307:361]" id="item_307_361_0" value="307:361" data-itemtype="Answer" type="checkbox"> Ziemann, McLaughlin and Kohler
<input name="control_307[0][308:1013]" id="item_307_1013_0" value="308:1013" data-itemtype="Skipper" type="checkbox"> None<br>
Run Code Online (Sandbox Code Playgroud)
CHECKBOX GROUP 2
<input name="control_1000[0][1000:999]" id="item_1000_999_0" value="307:1003" data-itemtype="Answer" type="checkbox"> First Options<br>
<input name="control_1000[0][1000:666]" id="item_1000_666_0" value="1000:666" data-itemtype="Answer" type="checkbox"> Some other option
<input name="control_1000[0][1000"123]" id="item_1000_123_0" value="308:1013" data-itemtype="Skipper" type="checkbox"> None<br>
Run Code Online (Sandbox Code Playgroud)
我创建了一个小提琴,告诉你我做了什么以及整个表格https://jsfiddle.net/8yf0v3xt/13/
我试图做这样的事情,但是没有用
$(:checkbox).change(function(){
var skipper = $("input:checkbox[data-itemtype='Skipper']");
if( skipper.is(":checked")){
$(this).attr('checked', false); //uncheck …Run Code Online (Sandbox Code Playgroud) 我喜欢通过声明我是 .NET 框架和 ASP.NET 的新手来开始我的问题。但是,我正在尝试学习 ASP.NET 5 MVC 6。我已经阅读了很多教程来加快速度。我从中学到了很多东西的主要教程是“在 7 天内学习 MVC ”
我想我已经了解MVC了所有架构,但是有一些术语/层让我感到困惑,即模型、业务逻辑层、数据访问层和视图模型。
这是我对MVC架构的整体理解“如有错误请指正”
id,其中包含以下列, firstname, lastname,username然后模型将被调用,user而“ id, firstname,lastname和username” 是属性。UsersController类有一个方法Index(),它从user模型请求一些数据,然后返回一个名为 的视图ShowAllUsers。然而,模型似乎在它下面还有另外 3 层,就像这样
此外,如果我想为我的控制器建立一个存储库,这适合这里吗?我确实理解这对于小型应用程序可能不是必需的,但我只是想了解和学习正确的方法,然后我可以决定我的应用程序是否需要它。
我的问题是什么是业务逻辑层,什么是数据访问层?并且将在什么地方库适合在这里?
我会欣赏一个例子的解释。
我试图在我的应用程序中使用存储库设计模式有两个原因
如果我决定不在某个时候使用Entity Framework,我喜欢将我的应用程序与Entity分离
我希望能够重用与模型交互的逻辑
我成功设置并使用了存储库模式.但是,我有一个复杂性来处理哪个是交易.
我希望能够使用事务,以便我可以对存储库进行多次调用,然后提交或回滚.
这是我的存储库界面
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace Support.Repositories.Contracts
{
public interface IRepository<TModel> where TModel : class
{
// Get records by it's primary key
TModel Get(int id);
// Get all records
IEnumerable<TModel> GetAll();
// Get all records matching a lambda expression
IEnumerable<TModel> Find(Expression<Func<TModel, bool>> predicate);
// Get the a single matching record or null
TModel SingleOrDefault(Expression<Func<TModel, bool>> predicate);
// Add single record
void Add(TModel entity);
// Add multiple records
void AddRange(IEnumerable<TModel> entities);
// …Run Code Online (Sandbox Code Playgroud) c# entity-framework transactions repository repository-pattern
在我使用c#编写的新WPF项目中,我想尝试使用Entity Framework Core与我的SQL Server数据库进行交互。
每次尝试将模型添加到上下文中时,都会出现以下错误
当IDENTITY_INSERT设置为OFF时,无法为表“订单”中的标识列插入显式值。
我正在使用Repository和UnitOfWork包装实体框架核心方法来执行所需的工作。
但最简单地说,我正在执行以下代码
var order = new Order();
order.Title = "some";
....
Context.Orders.Add(order);
Context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这是我的模特
public class Order
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Int64 Id { get; set; }
public string Status { get; set; }
public int? CustomerId { get; set; }
public DateTime? Birthdate { get; set; }
public int UtcOffset { get; set; }\
public DateTime CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; …Run Code Online (Sandbox Code Playgroud) 我有一个用c#ASP.NET MVC 5框架编写的项目.我设置了一个IoC使用Unity容器来处理依赖注入.
我需要建立某种通信功能,我的应用程序的任何部分都可以监听事件然后执行特定的逻辑.
以下是我第一次尝试构建事件/监听器,但想知道这是否是一个好方法,以及是否有更好的方法来创建事件/监听器.
// First we define a base class for the Events
// This allows me tho identify Events. Perhaps this could be changed to interface instead of a base class
public abstract class Event
{
}
// Second we define a base class for our listener
// each listener must provide a an event that it wish to listen to
public abstract class Listener<T> where T : Event
{
// …Run Code Online (Sandbox Code Playgroud) 我C#在ASP.NET Core 2.2框架的顶部编写了一个应用程序.
我正在使用Identity来进行用户管理和用户控制.目前,每当用户关闭他/她的浏览器并再次打开应用程序时,他们都需要再次登录.
我想将会话中的登录更改为在15分钟处于非活动状态后过期的cookie.
这是我添加到Startup类的内容
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<User()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddAuthentication()
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
// This code should be executed after the identity id registered to work
services.ConfigureApplicationCookie(config =>
{
config.SlidingExpiration = true;
config.ExpireTimeSpan = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在SharedWorker中实现服务器发送事件(SSE)。
该实现在Google Chrome浏览器中没有任何问题。但是,它根本无法在FireFox中使用。
当我尝试使其在FireFox中工作时,我在控制台中收到此错误。
error {
target: SharedWorker,
isTrusted: true,
message: "ReferenceError: EventSource is not defined",
filename: "https://example.com/add-ons/icws/js/worker.js",
lineno: 28,
colno: 0,
currentTarget: SharedWorker,
eventPhase: 2,
bubbles: false,
cancelable: true,
defaultPrevented: false
}
Run Code Online (Sandbox Code Playgroud)
我如何EventSource在里面使用SharedWorker?
这就是我建立连接的方式 SharedWorker
$(window).load(function(){
//establish connection to the shared worker
var worker = new SharedWorker("/add-ons/icws/js/worker.js" );
//listen for a message send from the worker
worker.port.addEventListener("message",
function(event) {
console.log( Math.random() );
processServerData(event.data);
}
, false
);
worker.onerror = function(event){
console.log(event);
};
//start the connection …Run Code Online (Sandbox Code Playgroud) 我相信SELECTSQL Server 中的每个语句都会导致放置共享锁或密钥锁.但它会在交易中放置相同类型的锁吗?共享锁或密钥锁是否允许其他进程读取相同的记录?
例如,我有以下逻辑
Begin Trans
-- select data that is needed for the next 2 statements
SELECT * FROM table1 where id = 1000; -- Assuming this returns 10, 20, 30
insert data that was read from the first query
INSERT INTO table2 (a,b,c) VALUES(10, 20, 30);
-- update table 3 with data found in the first query
UPDATE table3
SET d = 10,
e = 20,
f = 30;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
此时我的select语句仍会创建共享锁或密钥锁,还是会升级为独占锁?其他事务是否能够从table1读取记录,还是所有事务都会等到我的事务被提交,然后其他事务才能从中进行选择?
在一个应用程序中它是否因为将select语句移到事务之外而只是将插入/更新保留在一个事务中?
我正在为使用ASP.NET MVC编写的应用程序使用实体框架。
我需要能够调用存储过程并忘记它。我不在乎只想触发它的结果。
我试图通过使用单独的连接来使用该ExecuteSqlCommandAsync方法调用存储过程来实现这一点。但是存储过程似乎没有被解雇。
这是我的异步方法
protected async Task ProcessRecords(DateTime loadedAt, string email)
{
try
{
using (var conn = new AppContext())
{
var result = conn.Database.ExecuteSqlCommandAsync("EXEC [DedecatedProcesses] @p0, @p1;", loadedAt, email);
await Task.WhenAll(result);
}
}
catch (Exception e)
{
// Do something with e.Message
}
}
Run Code Online (Sandbox Code Playgroud)
然后从控制器中的动作方法像这样调用它
var loaded = ProcessRecords(DateTime.UtcNow, model.Email);
Run Code Online (Sandbox Code Playgroud)
运行代码时没有出现任何错误,但是该过程未运行。
当我使用SSMS执行存储过程时,它运行没有问题。
我该如何正确调用存储过程而忘却它?
c# ×6
javascript ×3
asp.net ×2
jquery ×2
repository ×2
sql-server ×2
transactions ×2
asp.net-core ×1
asp.net-mvc ×1
checkbox ×1
firefox ×1
html ×1
identity ×1
locks ×1
php ×1
sql ×1
websocket ×1
worker ×1
wpf ×1