背景
我正在创建运行一些状态检查的 ac# 应用程序(想想 nagios 样式检查)。
我理想中想要的是这个 c# 应用程序查看特定目录,然后编译/执行其中的任何 scriptcs 脚本,并根据结果采取行动(例如,发送状态检查失败的电子邮件警报)。
我希望脚本返回一个整数或其他东西(例如),该整数将指示状态检查成功或失败的天气。
返回给 C# 应用程序的值。
0 - Success
1 - Warning
2 - Error
Run Code Online (Sandbox Code Playgroud)
当第一次接到这个任务时,我认为这是 MEF 的工作,但是创建这些“状态检查”而不必创建项目或编译任何东西会方便得多,只需在文件夹中放置一个 scriptcs 脚本似乎更有吸引力.
所以我的问题是
是否有关于将 ac# app 和 scriptcs 一起使用的文档/示例(谷歌并没有给我带来太多好处)?
这是 scriptcs 的用例还是它从未真正打算像这样使用?
我是否可以更轻松地使用 roslyn 或一些动态编译/执行创建自定义解决方案?(我对scriptsc的经验很少)
我需要一个Web应用程序,能够以每秒非常多的请求进行操作,同时保持响应时间非常短(小于~70ms).
出于测试目的,我启动了3个c4.xlarge ec2实例并将它们放入弹性负载平衡器中.
我有一个看起来像这样的方法.
[HttpPost]
[Route("api/test/rps")]
public IHttpActionResult TestRequestsPerSecond(MediumSizedObject testObj)
{
return new StatusCodeResult(HttpStatusCode.NoContent, Request);
}
Run Code Online (Sandbox Code Playgroud)
我希望其中一个实例能够每秒处理数千个请求(因为它基本上什么都不做).令我惊讶的是,我无法在没有CPU变高的情况下每秒处理300个请求,并且请求开始排队.
以下是每秒240个请求的实例之一的性能.

正如您所看到的,我已经有19个排队请求,处理器是78%.(另外我的上下文切换到8-9K左右,看起来很高).
这发生在所有3台服务器上.
我在服务器上改变了一些事情
machine.config相关行
<processModel autoConfig="true"
maxWorkerThreads="100"
maxIoThreads="100"
minWorkerThreads="50"
minIoThreads="50" />
<httpRuntime
minFreeThreads="176"
minLocalRequestFreeThreads="152"
/>
Run Code Online (Sandbox Code Playgroud)
生产web配置(可能)相关的行
<system.web>
<sessionState mode="Off" />
<authentication mode="None" />
<compilation targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<remove name="PassportAuthentication" />
<remove name="Profile" />
<remove name="AnonymousIdentification" />
<remove name="WindowsAuthentication" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" …Run Code Online (Sandbox Code Playgroud) 也许该方法正在返回它应该如何,但我基本上只是做了一个看起来像这样的测试方法
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string TestJSON()
{
var location = new Location[2];
location[0] = new Location();
location[0].Latitute = "19";
location[0].Longitude = "27";
location[1] = new Location();
location[1].Latitute = "-81.9";
location[1].Longitude = "28";
return new JavaScriptSerializer().Serialize(location);
}
Run Code Online (Sandbox Code Playgroud)
当我从我的Android应用程序中点击这个时,我得到了这样的异常
Value <?xml of type java.lang.String cannot be converted to JSONArray
Run Code Online (Sandbox Code Playgroud)
我认为这个方法只返回JSON,但这就是Web服务方法返回的内容
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">[{"Latitute":"19","Longitude":"27"},{"Latitute":"-81.9","Longitude":"28"}]</string>
Run Code Online (Sandbox Code Playgroud)
是假设是这样的吗?有没有办法删除JSON之外的XML东西?我不确定我必须在我的web服务中做什么才能使它返回正确的数据格式
在Android上使用代码调用Web服务
public String readWebService(String method)
{
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://myserver.com/WebService.asmx/" + method);
Log.d(main.class.toString(), …Run Code Online (Sandbox Code Playgroud) 这可能是一个更通用的线程问题,我不确定.
但我有一个WPF应用程序订阅频道并侦听来自redis数据库的消息.
App.SubscriptionThread = new Thread(() =>
{
_redisSubscription.SubscribeToChannels("ChannelA", "ChannelB");
});
App.SubscriptionThread.Start();
Run Code Online (Sandbox Code Playgroud)
一旦我开始这个,我不知道如何阻止它.
我尝试过的事情.
使用Thread.Abort.这显然不会阻止它,因为线程只是永远挂起(没有取消订阅).
使用_redisSubscription.UnSubscribeFromAllChannels()来自UI线程.这也导致应用程序永远进入阻塞状态
强制关机使用Environment.Exit(0).这个似乎可以解决问题.不幸的是它也有......好......关闭我的应用程序的副作用.
如何停止聆听,我可以随意连接/重新连接?
我是通过在新线程中启动SubscribeToChannels来做错的吗?
我正在尝试使用bitbucket为Azure网站设置持续部署.
问题是我正在使用Azure没有权限的子模块(我拥有),因为默认情况下它不会添加.
我正在试图弄清楚如何添加SSH密钥,以便Azure可以连接并获取子模块.
我采取的步骤.
使用PuttyGen创建了一个新的公钥/私钥,在Azure名称下添加了我的bitbucket帐户的公钥
FTP到Azure,并将公钥和私钥文件(.ppk)添加到.ssh目录(是的,我不知道我想添加哪一个).它们被命名为azurePrivateKey.ppk和azurePublicKey.
更新了我的配置文件,看起来像这样
HOST *
StrictHostKeyChecking no
Host bitbucket.org
HostName bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/azurePrivateKey.ppk
Run Code Online (Sandbox Code Playgroud)
(没有线索,如果那是对的)
更新了我的已知主机,看起来像这样
bitbucket.org,131.103.20.168, <!--some key here...it was here when i opened the file, assuming it's the public key for the repo i tried to add-->
bitbucket.org,131.103.20.168, <!--the new public key i tried to add-->
Run Code Online (Sandbox Code Playgroud)我仍然得到相同的错误,没有获得子模块的权限.所以我无法弄清楚我做错了哪一步,因为我之前从未这样做过.
适用于 python 的 AWS 库 (boto) 有两种不同类型的接口用于与 AWS 配合使用,低级别client和更高级别的更 pythonic resource。
我的代码的一部分使用一个,而其他部分使用另一个。
从文档中可以找到client从 a 中获取 a resource。
# Create the resource
sqs_resource = boto3.resource('sqs')
# Get the client from the resource
sqs = sqs_resource.meta.client
Run Code Online (Sandbox Code Playgroud)
我的问题是如果有客户sqs,我如何从中获得boto3.resource?
(我不能简单地调用,boto3.resource('sqs')因为客户端有其他东西,例如已经附加到它的凭证,出于某种设计原因,资源试图从一堆我不想要的地方获取 AWS 凭证,我'我希望它使用客户端上设置的任何凭据/帐户)
刚刚第一次尝试OrmLite,并且已经通过示例/文档查看了20分钟,现在没有运气试图找到一个简单的答案.
有没有办法只返回某种类型的所有记录?(返回的东西可能是列表或其他东西.
我以为会有一个
db.SelectAll<T>();
Run Code Online (Sandbox Code Playgroud)
相似的东西.
我确定除了发送查询之外还有一种非常简单的方法吗?
SELECT * FROM [TableName]
Run Code Online (Sandbox Code Playgroud)
我敢肯定我只是忽略了其中一种方法,或者没有找到正确的超载......但如果有人能给我一个推动,那将是美妙的.
我刚拿起Simple Injector,我目前想做的就是:
Container.Register<IMessageHandler>(() => new MessageHandlerOne());
Container.Register<IMessageHandler>(() => new MessageHandlerTwo());
Run Code Online (Sandbox Code Playgroud)
我只是想注册两个消息处理程序,所以我可以稍后迭代它们.
要恢复这些注册的实例,这种方法听起来就像它可以做到的那样.
var instances = Container.GetAllInstances<IMessageHandler>();
//why doesn't instances contain both MessageHandlerOne, and MessageHandlerTwo ?
Run Code Online (Sandbox Code Playgroud)
相反,这会返回一个空的IEnumerable.
我究竟做错了什么?对于名为Simple Injector的东西,您会认为这会起作用吗?我是否以错误的方式思考这个问题?
我有一个非常标准的WebApi,可以执行一些基本的CRUD操作.
我正在尝试添加一些不同类型的查找,但我不太确定它是如何完成的.
这是我目前的FoldersController
public class FoldersController : ApiBaseController
{
//using ninject to pass the unit of work in
public FoldersController(IApiUnitOfWork uow)
{
Uow = uow;
}
// GET api/folders
[HttpGet]
public IEnumerable<Folder> Get()
{
return Uow.Folders.GetAll();
}
// GET api/folders/5
public Folder Get(int id)
{
return Uow.Folders.GetById(id);
}
// POST api/folders
public HttpResponseMessage Post(Folder folder)
{
Uow.Folders.Add(folder);
Uow.Commit();
var response = Request.CreateResponse(HttpStatusCode.Created, folder);
// Compose location header that tells how to get this Folder
response.Headers.Location = new Uri(Url.Link(WebApiConfig.DefaultRoute, new { …Run Code Online (Sandbox Code Playgroud) 是否有一种简单的方法可以打印出VS变量.
$(SolutionDir)
$(TargetDir)
$(MSBuildProjectDir)
$(PacketOutputDir)
ect
Run Code Online (Sandbox Code Playgroud)
我知道我可以查看每个人所做的事情,从那里引出他们的价值,但是我可以在包管理器控制台中输入什么东西,或者只是得到它的当前值是什么?或者将它们输出到输出的简单方法?
试图配置我的nuget.targets文件,我想我把东西放在错误的地方,在运行中找到这些值会非常有帮助
我有一张像这样的桌子
create table installs (datetime date,installs int);
insert into installs (date, installs)
values
('10-01-2014', 2),
('10-02-2014', 4),
('10-03-2014', 1),
('10-04-2014', 10)
Run Code Online (Sandbox Code Playgroud)
所以我们的表数据看起来像这样

给定这个表,我想要一个可以生成几天内安装计数的查询。
所以我正在寻找的结果集是

例如,查看 day 的记录10/2/2014。
共有day_out=04 个安装。在那之后的一天 ( days_out=1),现在总共有 5 个安装(10/2 起有 4 个安装,10/3 起有 1 个安装)在那之后的第二天 ( days_out=2),总共有 15 个安装(前 2 天有 5 个安装) ,4号新增10个)
我之前在一个更大的查询中很容易地做到了这一点,只是使用内部选择来获取安装计数(当场对它们求和),但是,这不再是削减它......所以我能想到的唯一解决方案是创建一个值表,然后将其与更大的查询连接起来。
我编写此查询时遇到的唯一问题是我不知道如何执行:)。
如果有人能为这个问题想出一个更好的标题,我会改变它,当我不确定该朝哪个方向发展时,很难命名这个标题。
遇到这个问题.
尝试为自定义文件执行一些基本语法突出显示.需要知道元素是否在标记内.
一些样本数据
<span class="class1">
Some Text <span class="class2">Some More Text</span>
TEST
<span>Text</span>
</span>
TEST
Run Code Online (Sandbox Code Playgroud)
我想在这里做的是找到没有嵌套在span标签中的TEST的出现.
第一个class1标签不应该匹配,因为它嵌套在里面,第二个标签应该匹配,因为它没有嵌套在任何span标签中.
第一个测试应该显示它嵌套在span标签中,第二个测试应该显示它不是.
我知道正则表达式并不是用来解析html,但对于我的小情况,我认为使用正则表达式是最简单的,因为我不知道另一种方法来做我正在寻找的东西.我不反对使用XPath,如果它可以快速解决这个问题.
在我的代码中,我想要的是一个像这样的方法
bool InsideSpanTag(string source, int index);
Run Code Online (Sandbox Code Playgroud)
如果索引位于字符串源中的某些span标记之间,则返回true;如果不是,则返回false.
编辑:没关系,我只计算索引左侧的开始和结束跨度标签,看看开口跨度标签的数量是否大于结束标签.有点快,又脏,但这真的是我所需要的.
所以,我需要调用第三方方法,它有这样的签名
ThirdPartyMethod<T>(IEnumerable<T> items)
我的问题是我在编译时不知道我的对象的类型.
在编译时我有这个
IEnumerable myObject;
Type typeOfEnumerableIHave;
Run Code Online (Sandbox Code Playgroud)
Sooo ..反思可以帮我解决这个问题吗?
为简单起见,假装我有这样的方法
void DoWork(IEnumerable items, Type type)
{
//In here I have to call ThirdPartyMethod<T>(IEnumerable<T> items);
}
Run Code Online (Sandbox Code Playgroud) c# ×6
asp.net ×2
servicestack ×2
amazon-ec2 ×1
android ×1
azure ×1
bitbucket ×1
boto3 ×1
get ×1
ienumerable ×1
iis ×1
json ×1
nuget ×1
powershell ×1
python ×1
redis ×1
reflection ×1
regex ×1
scriptcs ×1
sql-server ×1
ssh ×1
web-services ×1
xml ×1