我使用unity容器来解决应用程序中的依赖项.
依赖项及其依赖项(等等)在app.config中注册,因为我需要能够更改应用程序在生产中的行为方式.
有时候,错过了依赖项的类型注册,只有在应用程序的生命周期中解析了类型的实例时才会出现这种情况,这意味着可能存在只能在集成测试期间获取的问题 - 这不是理想.
我希望能够以编程方式检查(可能作为CI构建过程的一部分)已正确进行统一类型注册.我的意思是,如果我解析一个类型的实例,我可以确信该类型的依赖项(通过构造函数注入)也已注册并将被解析.
我只需要检查默认的构建配置,在这里不考虑在实时站点上进行的更改.另外 - 我不想使用硬编码的统一注册.
我现在想到这一点的唯一方法是解析unity配置文件并尝试解析找到的类型的每个实例...
是否有更简单的方法来验证统一注册是否全部存在?
我是docker swarm模式的新手(我特别在谈论docker v1.12中的swarm模式,我并不是指旧的非集成'docker swarm').
我正在尝试评估它是否适合为新的软件项目构建一个大型分布式集装箱平台(我正在与类似的技术进行比较,例如mesosphere,kubernetes等).
我对旧的非集成docker swarm(非swarm模式)的理解是,您可以使用过滤器将节点定位到多个故障域.Docker Swarm模式中是否存在等价物?
例如,在测试环境中,我有6个VM - 所有运行的docker.
我启动VM 1和2并调用我的故障domain1
我启动VM 3和4并调用我的故障domain2
我启动VM 5和6并调用我的故障domain3
所有故障域都包含一个swarm管理器和一个swarm worker.实际上,每个域有2个节点可以托管服务容器.
我告诉docker创建一个新服务,并根据包含简单Web服务的图像运行3个容器.Docker做了它并且旋转了3个容器并且我的服务正在运行; 我可以毫无问题地访问我的负载均衡Web服务.欢呼!
但是,我想特别告诉docker在domain1,domain2和domain3上分发我的3个容器.
我怎样才能做到这一点?(也 - 我是在正确的网站上发布的 - 这应该是在其他一个堆叠交换网站上吗?)
如果这已在本网站或广泛的ServiceStack文档中得到解答,请致歉 - 我看过,但如果确实存在,我会很感激指针!
我一直试图敲定一个示例服务堆栈(1.0.35)服务,该服务演示了使用.NET核心(不是.NET 4.5.x)的OAuth2的使用.
我找到了这个网页并添加了所描述的AuthFeature插件,这对于可用的提供商来说似乎没问题.
我的问题:Yahoo,OpenId,Google和LinkedIn提供商不会出现ServiceStack.Auth命名空间的一部分(但是?).我查看了Servicestack.Authentication.OAuth2 NuGET包,但这似乎是针对.NET 4.6.x. 这个功能是可用的还是ServiceStack .NET核心的路线图?
我的演示应用程序的完整代码回购:
namespace ServiceStackAuthTest1
{
public class Program
{
public static void Main(string[] args)
{
IWebHost host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseUrls("http://*:40000/")
.Build();
host.Run();
}
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseServiceStack((AppHostBase)Activator.CreateInstance<AppHost>());
app.Run((RequestDelegate)(context => (Task)Task.FromResult<int>(0)));
}
}
public class AppHost : AppHostBase
{
public AppHost()
: base("My Test Service", typeof(MyService).GetAssembly())
{
} …Run Code Online (Sandbox Code Playgroud) 我试图限制用户可以在文本框中输入的行数。
我一直在研究 - 我能找到的最接近的是: Limit the max number of chars per line in a textbox。
并限制文本框中每行的最大字符数,结果是用于 winform。
这不是我所追求的......还值得一提的是,有一个误导性的maxlines属性,我发现它只限制了文本框中显示的内容。
我的要求:
这些要求用于创建 WYSIWYG 文本框,该文本框将用于捕获最终将被打印的数据,并且字体需要可变 - 如果文本被截断或对于固定大小的行来说太大 - 那么它就会出来以这种方式打印(即使它看起来不正确)。
我已经尝试通过处理事件来自己做这件事——但是我很难做到这一点。到目前为止,这是我的代码。
XAML
<TextBox TextWrapping="Wrap" AcceptsReturn="True"
PreviewTextInput="UIElement_OnPreviewTextInput"
TextChanged="TextBoxBase_OnTextChanged" />
Run Code Online (Sandbox Code Playgroud)
背后的代码
public int TextBoxMaxAllowedLines { get; set; }
public int TextBoxMaxAllowedCharactersPerLine { get; set; }
public MainWindow()
{
InitializeComponent();
TextBoxMaxAllowedLines = 5;
TextBoxMaxAllowedCharactersPerLine = 50;
} …Run Code Online (Sandbox Code Playgroud) 我有一个使用servicestack用C#编写的控制台应用程序,其形式如下:
static void Main(string[] args)
{
//Some service setup code here
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
在Windows上作为控制台运行时,此代码可以正常工作.实现几乎完全是https://github.com/ServiceStack/ServiceStack/wiki/Self-hosting,因为这是一个测试项目
然后我在linux上使用mono编译这个项目并构建成一个docker文件.
如果它是交互式的,那么基于这个图像运行容器没有问题
docker run -it --name bob -p 1337:1337 <myservice>
Run Code Online (Sandbox Code Playgroud)
容器在前台运行
但是,如果省略-it开关,容器会立即退出 - 我假设因为没有STDIN流,所以Console.ReadKey()不起作用.
我试图让服务托管在一个群体中,所以没有分离的概念.我可以在我的main方法中启动一个循环来保持控制台服务的活着,但这对我来说似乎很烦人......
是否有一种很好的方法可以保持我的服务在我想要运行我的容器detatched(docker run -d ...)的情况下
我的问题
由于有一些代码可以支持这个问题 - 我会先提出来.在linux/mono上运行的Servicestack自托管服务(或者实际上是任何http侦听器)是否存在任何已知的性能问题?
我的实际用例是用于调用多个其他(非公共)Web服务的Web服务.当在windows下运行时,我注意到性能非常快,但是当在linux/mono下运行时 - 它似乎变慢了,请求的长度可能需要15秒(相比之下,在Windows下运行0.2秒).
我的后续问题是 - 我在这里做错了什么(如果有的话)?
.
我的环境
我运行的是Windows 10 PC - i7-6700 @ 3.4ghz 4核 - (超线程 - 所以8个逻辑核),32GB ram,并且有一个Linux VM(Ubuntu 16.04)使用hyper V.它有2个核心(i7-6500@3.4ghz - 分配给它的4GB Ram).基本上 - 下面的代码中没有任何内容应该对下面的服务定义的硬件过度征税.我也试过在其他虚拟机上托管以确保它不是我的本地硬件 - 但无论我在哪里尝试,我似乎都能获得一致的结果.
我使用mono:latest image和xbuild我的C#解决方案创建一个docker镜像,我在linux机器上托管.
另外 - 我对Linux世界很陌生 - 不确定如何在这个平台上进行故障排除(还是!)
其中一项服务的示例
程序类:适用于windows/linux:
class Program
{
static void Main(string[] args)
{
var listeningOn = args.Length == 0 ? "http://*:32700/api/user/" : args[0];
var appHost = new AppHost()
.Init()
.Start(listeningOn);
Console.WriteLine("AppHost Created at {0}, listening on {1}",
DateTime.Now, listeningOn);
// check …Run Code Online (Sandbox Code Playgroud) 背景:我有一项服务,其目的是为请求者提供对象 - 它基本上从数据库中获取复杂数据并将其转换一次(有点像数据视图)以生成简化记录.然后,它根据需要提供多达10万条记录(取决于请求的性质),从而为其他服务的请求提供服务.
这个想法是复杂的转换只进行一次并由服务缓存 - 它比每次访问视图时让数据库更好地工作更快,并且为了我的目的工作得很好.(我相信这被称为SSOS)
缓存数据的方式是在对象列表中,这些对象是标准.Net类型的属性包.这些对象没有引用任何其他内容.记录将定期更改,并且必须更新缓存,这意味着必须定位,丢弃和替换原始记录.
现在缓存中的记录将在那里存在很长时间,并且将被标记为Gen 2集合; 几乎所有的收藏品都会在Gen2阶段发生,因为这些物品长期存在(故意).
所以我对Gen2集合的理解是它们很慢,如果集合主要在Gen2上运行,那么优化器会更频繁地这样做.
我希望能够以一种最终不会触发完整Gen2集合的方式取消引用列表中的对象......我在想,也许有一种方法可以将它标记为Gen0然后de-在替换它之前引用它 - 但我认为这不可行.
我仅限于使用.Net 4,该应用程序是一项服务,为多达100个客户提供数据,这些客户在一段时间内请求完整列表或更改列表.
问题:任何人都可以提出一种以GC友好的方式取消引用长寿命对象的方法,或者可能采用另一种方法来解决这个问题吗?
我刚刚注意到.NET核心引入了Threadpool.QueueUserWorkItem的重载,它接受一个名为'preferlocal'的布尔值,并允许我传递一个类型安全的状态对象(它有一个通用参数)
在MSDN文档目前尚不完整,看起来像这样(为后人-它可能在将来被更新):
QueueUserWorkItem<TState>(Action<TState>, TState, Boolean)
C#
public static bool QueueUserWorkItem<TState> (Action<TState> callBack, TState state, bool preferLocal);
Type Parameters TState
Parameters
callBack Action<TState>
state
preferLocal Boolean
Returns
Boolean
Run Code Online (Sandbox Code Playgroud)
什么是boolean(preferLocal),它将如何影响我的代码?
c# ×7
servicestack ×3
.net-core ×2
docker ×2
mono ×2
cross-domain ×1
docker-swarm ×1
httplistener ×1
limit ×1
nancy ×1
oauth-2.0 ×1
optimization ×1
scaling ×1
textbox ×1
threadpool ×1
wpf ×1