小编Kyl*_*bel的帖子

从 c# 应用程序执行 ScriptCS

背景

我正在创建运行一些状态检查的 ac# 应用程序(想想 nagios 样式检查)。

我理想中想要的是这个 c# 应用程序查看特定目录,然后编译/执行其中的任何 scriptcs 脚本,并根据结果采取行动(例如,发送状态检查失败的电子邮件警报)。

我希望脚本返回一个整数或其他东西(例如),该整数将指示状态检查成功或失败的天气。

返回给 C# 应用程序的值。

0 - Success
1 - Warning
2 - Error
Run Code Online (Sandbox Code Playgroud)

当第一次接到这个任务时,我认为这是 MEF 的工作,但是创建这些“状态检查”而不必创建项目或编译任何东西会方便得多,只需在文件夹中放置一个 scriptcs 脚本似乎更有吸引力.

所以我的问题是

  1. 是否有关于将 ac# app 和 scriptcs 一起使用的文档/示例(谷歌并没有给我带来太多好处)?

  2. 这是 scriptcs 的用例还是它从未真正打算像这样使用?

  3. 我是否可以更轻松地使用 roslyn 或一些动态编译/执行创建自定义解决方案?(我对scriptsc的经验很少)

c# scriptcs

7
推荐指数
1
解决办法
2900
查看次数

优化IIS和ASP.net以获得最大请求数/秒

我需要一个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)

asp.net iis amazon-ec2 asp.net-web-api

7
推荐指数
1
解决办法
928
查看次数

创建一个返回JSON而不是XML的ASP.net WebService

也许该方法正在返回它应该如何,但我基本上只是做了一个看起来像这样的测试方法

    [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)

xml asp.net android json web-services

6
推荐指数
1
解决办法
6385
查看次数

Redis Pub/Sub ServiceStack,取消线程

这可能是一个更通用的线程问题,我不确定.

但我有一个WPF应用程序订阅频道并侦听来自redis数据库的消息.

 App.SubscriptionThread = new Thread(() =>
 {
     _redisSubscription.SubscribeToChannels("ChannelA", "ChannelB");
 });
 App.SubscriptionThread.Start();
Run Code Online (Sandbox Code Playgroud)

一旦我开始这个,我不知道如何阻止它.

我尝试过的事情.

  1. 使用Thread.Abort.这显然不会阻止它,因为线程只是永远挂起(没有取消订阅).

  2. 使用_redisSubscription.UnSubscribeFromAllChannels()来自UI线程.这也导致应用程序永远进入阻塞状态

  3. 强制关机使用Environment.Exit(0).这个似乎可以解决问题.不幸的是它也有......好......关闭我的应用程序的副作用.

如何停止聆听,我可以随意连接/重新连接?

我是通过在新线程中启动SubscribeToChannels来做错的吗?

c# multithreading publish-subscribe redis servicestack

6
推荐指数
1
解决办法
3386
查看次数

将SSH密钥添加到Windows Azure

我正在尝试使用bitbucket为Azure网站设置持续部署.

问题是我正在使用Azure没有权限的子模块(我拥有),因为默认情况下它不会添加.

我正在试图弄清楚如何添加SSH密钥,以便Azure可以连接并获取子模块.

我采取的步骤.

  1. 使用PuttyGen创建了一个新的公钥/私钥,在Azure名称下添加了我的bitbucket帐户的公钥

  2. FTP到Azure,并将公钥和私钥文件(.ppk)添加到.ssh目录(是的,我不知道我想添加哪一个).它们被命名为azurePrivateKey.ppk和azurePublicKey.

  3. 更新了我的配置文件,看起来像这样

     HOST *
    StrictHostKeyChecking no
    
    Host bitbucket.org
    HostName bitbucket.org
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/azurePrivateKey.ppk
    
    Run Code Online (Sandbox Code Playgroud)

    (没有线索,如果那是对的)

  4. 更新了我的已知主机,看起来像这样

    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)

我仍然得到相同的错误,没有获得子模块的权限.所以我无法弄清楚我做错了哪一步,因为我之前从未这样做过.

ssh bitbucket azure continuous-deployment

5
推荐指数
2
解决办法
7147
查看次数

boto3 从客户端获取资源

适用于 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 凭证,我'我希望它使用客户端上设置的任何凭据/帐户)

python amazon-web-services boto3

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

ServiceStack OrmLite,阅读所有记录

刚刚第一次尝试OrmLite,并且已经通过示例/文档查看了20分钟,现在没有运气试图找到一个简单的答案.

有没有办法只返回某种类型的所有记录?(返回的东西可能是列表或其他东西.

我以为会有一个

db.SelectAll<T>();
Run Code Online (Sandbox Code Playgroud)

相似的东西.

我确定除了发送查询之外还有一种非常简单的方法吗?

SELECT * FROM [TableName]
Run Code Online (Sandbox Code Playgroud)

我敢肯定我只是忽略了其中一种方法,或者没有找到正确的超载......但如果有人能给我一个推动,那将是美妙的.

servicestack ormlite-servicestack

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

使用Simple Injector注册相同类型的实例

我刚拿起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的东西,您会认为这会起作用吗?我是否以错误的方式思考这个问题?

c# dependency-injection ioc-container simple-injector

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

WebApi添加另一个Get方法

我有一个非常标准的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)

c# get asp.net-web-api

3
推荐指数
1
解决办法
2万
查看次数

打印出Visual Studio PowerShell变量

是否有一种简单的方法可以打印出VS变量.

$(SolutionDir)
$(TargetDir)
$(MSBuildProjectDir) 
$(PacketOutputDir) 
ect
Run Code Online (Sandbox Code Playgroud)

我知道我可以查看每个人所做的事情,从那里引出他们的价值,但是我可以在包管理器控制台中输入什么东西,或者只是得到它的当前值是什么?或者将它们输出到输出的简单方法?

试图配置我的nuget.targets文件,我想我把东西放在错误的地方,在运行中找到这些值会非常有帮助

powershell nuget visual-studio-2012

3
推荐指数
1
解决办法
459
查看次数

带子运行总计的递归 SQL 查询

我有一张像这样的桌子

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个)

我之前在一个更大的查询中很容易地做到了这一点,只是使用内部选择来获取安装计数(当场对它们求和),但是,这不再是削减它......所以我能想到的唯一解决方案是创建一个值表,然后将其与更大的查询连接起来。

我编写此查询时遇到的唯一问题是我不知道如何执行:)。

如果有人能为这个问题想出一个更好的标题,我会改变它,当我不确定该朝哪个方向发展时,很难命名这个标题。

sql-server common-table-expression

2
推荐指数
1
解决办法
126
查看次数

RegEx:找出我的比赛是否在<span>中

遇到这个问题.

尝试为自定义文件执行一些基本语法突出显示.需要知道元素是否在标记内.

一些样本数据

<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.

编辑:没关系,我只计算索引左侧的开始和结束跨度标签,看看开口跨度标签的数量是否大于结束标签.有点快,又脏,但这真的是我所需要的.

c# regex

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

使用反射将IEnumerable转换为IEnumerable <T>

所以,我需要调用第三方方法,它有这样的签名

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# reflection ienumerable

0
推荐指数
1
解决办法
1789
查看次数