如何从Controller调用SignalR Core Hub方法?
我使用ASP.NET Core 2.0与Microsoft.AspNetCore.SignalR(1.0.0-alpha2-final).
我有与Excel,SolidEdge通信的Windows服务...当操作完成后,它会在ASP.NET核心应用程序中向我的控制器发送请求.现在我需要通过SignalR通知连接到服务器的所有客户端,外部程序完成了一些任务.
我无法改变窗口服务的工作方式.(无法从窗口服务连接到SignalR).
我为旧的SignalR(GlobalHost.ConnectionManager.GetHubContext)找到了很多解决方案,但是已经发生了很大变化,而且这些解决方案不再适用了.
我的控制器:
[Route("API/vardesigncomm")]
public class VarDesignCommController : Controller
{
[HttpPut("ProcessVarDesignCommResponse/{id}")]
public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
{
//call method TaskCompleted in Hub !!!! How?
return new JsonResult(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我的中心:
public class VarDesignHub : Hub
{
public async Task TaskCompleted(int id)
{
await Clients.All.InvokeAsync("Completed", id);
}
}
Run Code Online (Sandbox Code Playgroud) 哪个是在asp.net core 2.0 Web应用程序中使用Nlog的最佳方式
我找到了很多不同的解决方案如何配置.这是其中两个.还有其他更好的方法吗?
A)在启动服务器之前创建记录器:
public class Program
{
public static void Main(string[] args)
{
// NLog: setup the logger first to catch all errors
var logger = NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger();
try
{
logger.Debug("init main");
BuildWebHost(args).Run();
}
catch (Exception e)
{
//NLog: catch setup errors
logger.Error(e, "Stopped program because of exception");
throw;
}
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>().UseNLog() // use NLog for DI Logger
.Build();
}
Run Code Online (Sandbox Code Playgroud)
B)配置内部启动
public class Startup
{
public Startup(IHostingEnvironment env, IConfiguration configuration)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个域和实体类,如下所示:
public class DomainUser
{
public string Username {get;set;}
public IList<string> PhoneNumbers {get;set;}
}
public class EntityUser
{
public string Name {get;set;}
public IList<Phone> PhoneNumbers {get;set;}
}
public class Phone
{
public int Id {get;set;}
public string PhoneNumber {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 Automapper 进行DomainUser映射EntityUser。但我不知道如何从 映射IList<string>到IList<Phone>并填充该PhoneNumer属性。
我的CreateMap看起来像这样:
Config.CreateMap<DomainUser, EntityUser>()
.ForMember(dest => dest.Username, opts => opts.MapFrom(src => src.Username)
.ForMember(entity => entity.PhoneNumbers.Select(x => x.PhoneNumber), opts => opts.MapFrom(domain => domain.PhoneNumbers) // This doesn't …Run Code Online (Sandbox Code Playgroud) 在文档中的日志记录示例中,有一个示例如何将记录器注入控制器:
public class TodoController : Controller
{
private readonly ITodoRepository _todoRepository;
private readonly ILogger _logger;
public TodoController(ITodoRepository todoRepository,
ILogger<TodoController> logger)
{
_todoRepository = todoRepository;
_logger = logger;
}
}
Run Code Online (Sandbox Code Playgroud)
每次我将记录器注入此处时,DI框架是否会创建一个新的记录器?有没有更好的办法?
我的目标是 GET 和 POST 文件到 SP Online。
我用这两种方法编写了一个 WEB API。这些方法使用 CSOM 与 SP Online 进行交互。
GET 将响应 Ok(字节数组)返回给客户端,POST 获取要在请求正文中上传的整个文件,并以块的形式执行上传到 Sharepoint Online。
有人告诉我,我应该使用流技术,因为上下文是具有许多同时请求的企业应用程序。所以 GET 方法应该向客户端返回一个流,客户端应该将请求作为流发送到 POST。
在客户端,我被迫使用 RestSharp 库。
所以:
1)如何使用RestSharp来处理流?
2) WebAPI 如何返回流?
3)随着文件,我发送了很多元数据。如何以流模式上传文件并只发送一次元数据?
客户端,get 需要一个字节数组,post 发送一个字节数组和元数据。
在网上我发现了太多的技巧。有标准的吗?