小编trn*_*son的帖子

转换Web API以使用自托管

我正在尝试将现有的ASP.NET Web API项目(当前在IIS中托管)转换为可以使用SelfHost框架的项目.我对实际细节有点模糊,但我知道我可以在控制台窗口中运行自主服务器,然后在它上面运行服务.我遇到的问题是我的项目是MVC项目而不是控制台项目.我对控制台/ Windows应用程序的熟悉程度有限,因为我通常使用要在IIS中托管的项目.

我有点困惑的是我是否需要将Visual Studio中现有的Web API项目转换为新的控制台应用程序,或者是否有办法在解决方案中创建另一个控制台应用程序项目,该项目可以充当Web服务器Web API服务,或者更确切地说,是否有一种方法可以向现有MVC项目添加带有Main()入口点的控制台元素(覆盖Global.asax入口点).

搜索没有产生太多信息,可以帮助我填补这一知识空白.希望有人能指出我正确的方向.即使是在高水平.

c# asp.net iis asp.net-web-api owin

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

性能计数器NextValue()非常慢(1,000+计数器)

在我们的应用程序中,我们使用Windows性能计数器来存储我们的一些应用程序指标,这些指标稍后会在某些Web服务中检索.

我遇到了从计数器读取值所花费的时间问题.我已经浏览了我的应用程序的其余部分,一切都很好,性能明智,但从循环中的计数器(从列表或数组)读取需要花费大量的时间.

示例代码:

// This triggers a read of the counter's initial value (1000ms delay following for calculated counters)
counters.ToList().ForEach(counter => counter.NextValue());
Run Code Online (Sandbox Code Playgroud)

在我对上面的循环的测试中,1,359个计数器的列表需要20秒,并且使用秒表,似乎读取计数器值的平均时间是0-10ms,或大约80-90ms.其中很多都需要0ms,最高约为170ms,平均非零值约为80-90ms.

也许我太乐观了,但我认为读取1,000个数值应该只需要几毫秒.这里有更多的处理工作比我知道的还要多吗?

我实际上在我的逻辑中有另一个循环,它获得计算计数器的第二个值.这只会使情况变得更糟.:)

谢谢!


更新1

我把计数器检索包裹在一个秒表中,我对结果感到惊讶.阅读即使是简单的属性.RawValue仍然需要花费过多的时间.据我所知,计数器基本上都是一样的,检索应该非常快; 奇怪的是,我也看到了网络类别的计数器需要更长时间的模式.

根据http://joe.blog.freemansoft.com/2014/03/windows-performance-counters.html,性能计数器服务的性能甚至不应该是一个考虑因素.

我已将一些秒表结果发布到以下的pastebin:http://pastebin.com/raw.php?i = aDJk2Tru

我的代码如下:

Stopwatch t;
foreach (var c in counters)
{
    t = Stopwatch.StartNew();
    var r = c.RawValue;
    Debug.WriteLine(t.ElapsedMilliseconds.ToString("000") + " - " + c.CategoryName + ":" + c.CounterName + "(" + c.CounterType + ") = " + r);
}
Run Code Online (Sandbox Code Playgroud)

正如您在粘贴中看到的那样,很多读取都是0,但在50-100ms范围内有很多.我真的不明白这是怎么回事.当然,一个计数器值应该和其他值一样快,对吧?

.net c# perfmon performancecounter

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

除了"www"之外的任何字符串的正则表达式?(子域)

我想知道是否有人可以帮助我在C#中使用正则表达式.我认为这很简单,但我一直在抨击我的大脑并且不太确定为什么我会遇到这么困难.:)

我已经找到了几个例子,但我似乎无法操纵它们去做我需要的东西.

我只需要匹配任何不是"www"的字母数字+破折号子域名字符串,而只需要匹配"."

另外,理想情况下,如果有人输入"www.subdomain.domain.com",我希望尽可能忽略www.如果没有,这不是一个大问题.

换句话说,我想匹配:

  • (测试) .domain.com
  • (test2) .domain.com
  • (wwwasdf) .domain.com
  • (asdfwww) .domain.com
  • (w) .domain.com
  • (wwwwww) .domain.com
  • (asfd-12345-www-bananas) .domain.com
  • 万维网.(子域名) .domain.com

我不想匹配:

  • (www) .domain.com

在我看来它应该很容易,但我遇到了"不匹配"部分的麻烦.

对于它的价值,这是在IIS 7 URL重写模块中使用,以重写所有非www子域.

谢谢!

c# regex asp.net string rewrite

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

ReportViewer RDLC - Azure网站错误80004005

我希望有人可以帮助我.这太痛苦了.我花了几个小时在上面,我的客户变得越来越沮丧.:(

我在Azure网站和SQL Azure上托管.我正在使用报告程序集的第10版.在Azure之外一切都很好(localhost,没有问题)

我在用户控件中的ASP.NET中有一个ReportViewer.ReportViewer和RDLC非常适合显示和导出到Excel/Word,但我在IE中导出和打印时遇到问题.

打印时:

提示:打印期间发生错误.(0X80004005)

网页错误详情

用户代理:Mozilla/4.0(兼容; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3)时间戳:2013年4月24日星期三03:18:56 UTC

消息:未指定错误.行:1058字符:13代码:0 URI:http: //XXXXXXX.azurewebsites.net/Reserved.ReportViewerWebControl.axd?OpType=Resource&Version=10.0.40219.329&Name=ViewerScript

该.axd的第1058行是:

printObj.Print(printInfo.PrintRequestPath,printInfo.PrintRequestQuery,printInfo.ReportDisplayName);

导出为PDF时:

'/'应用程序中的服务器错误.

参数无效.描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.ArgumentException:参数无效.

来源错误:

在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.

堆栈跟踪:

[ArgumentException:参数无效.]
System.Drawing.Graphics.GetHdc()+1143305
Microsoft.ReportingServices.Rendering.RichText.LineBreaker.Flow(TextBox textBox ,Graphics g,FontCache fontCache,FlowContext flowContext,Boolean keepLines,Single&height) +57
Microsoft.ReportingServices.Rendering.RichText.TextBox.MeasureFullHeight(TextBox textBox,Graphics g,FontCache fontCache,FlowContext flowContext,Single&contentHeight)+500
Microsoft.ReportingServices.Rendering.HPBProcessing.TextBox.DetermineVerticalSize(PageContext pageContext,Double topInParentSystem,Double bottomInparentSystem,List 1 ancestors,Boolean&anyAncestorHasKT,Boolean hasUnpinnedAncestors,Nullable 1 detailCellsState,PageContext pageContext)+108 Microsoft.ReportingServices.Rendering.HPBProcessing.Tablix.TraverseColumnMembers(Tablix tablix,TablixMember colMemberParent,Int32 parentColIndex,RowInfo currRowInfo,Boolean create,Double startInTablix ,Double endInTablix,Int32&detailCellIndex,Int32&visib leSpan,List 1&pageStructMemberCell,Boolean …

c# asp.net rdlc azure ssrs-2008

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

了解异步 - 我可以等待同步方法吗?

async-await也许是试图在C#中理解,并且有点陷入"鸡和蛋"的问题.

一个async方法是否需要调用另一个方法才能async使它异步?

作为一个高级示例,我正在尝试对文件系统进行简单的写入,但不确定如何使这个任务等待,如果有的话.

public Task<FileActionStatus> SaveAsync(path, data)
{
    // Do some stuff, then...

    File.WriteAllBytes(path, data); // <-- Allow this to yield control?

    // ... then return result
}
Run Code Online (Sandbox Code Playgroud)

在我试图异步的方法中调用那行代码.因此,在编写文件时,我想对应用程序进行控制,但不太确定如何执行此操作.

有人可以用一个非常高级的例子来启发我,我将如何以某种async方式将文件写入文件系统?

.net c# io asynchronous async-await

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

有关ASP.NET Web API RESTful服务上的OpenID/OAuth的建议

我一直在阅读很多关于OpenID和OAuth的内容,但却无法就如何在基于服务的架构中使用它们进行一些联系.

这是我的情景:

  • 我正在编写新的ASP.NET Web API服务(RESTful/JSON)
  • 这些服务将由客户端应用程序(当前桌面网站,新移动网站,以及可能的PHP网站或未来的JavaScript客户端)使用
  • 我们的桌面网站目前使用ASP.NET成员资格提供程序(webforms)

我们正在创建的新API服务集应该处理所有事情,包括身份验证和授权.

我的问题是:

  • 由于我们对访问API的客户端应用程序有明确的控制权(即,这不是公共API,而是集成已批准合作伙伴的API),我们是否一定需要OAuth?
  • OpenID会取代我们的.NET Membership功能,还是补充它?
  • 鉴于我们需要使用成员资格提供程序使用遗留系统对用户进行身份验证,我们是否需要使用某种.NET成员身份OpenID提供程序,或者我们是否像往常一样进行身份验证并向用户授予像我们目前一样的成员身份令牌?

我想总结一下:

  • 我正在写一些新服务
  • 对于该客户端应用程序的用户,任何已批准的客户端应用程序都可以使用它们
  • 我们需要继续支持我们的.NET成员资格数据

对不起,这些是基本问题,但我确信它们很容易回答.谢谢!

asp.net security openid oauth asp.net-web-api

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

没有System.Web.Http的ASP.NET Web API控制器(可插入,解耦架构)

我正在使用ASP.NET Web API创建一个可插拔的项目框架.我有很多胆量已经弄明白但是我对架构的一部分有问题,我不完全确定如何解耦.

作为简化示例,我有以下内容:

  • 服务/表示层(简单的Web API托管项目,在此内部很少,它基本上只是一个处理IIS中的托管或自托管的shell)
  • 域层,包含项目的核心,域层部分
  • 服务(N个服务,每个服务都引用了Domain层:思考微服务).目前,这些服务中的每一个都引用了ASP.NET Web API 2.1

现在,服务都引用了Domain层,因为它有接口,帮助器等.但是,Domain层也引用了ASP.NET Web API 2.1等内容.我的想法是在域中有一个基础"BaseController",每个服务的控制器都可以从中继承,反过来都必然会继承像Get(),Post()等有线的东西.问题是我不希望每个服务都必须引用ASP.NET Web API 2.1和其他依赖项.我希望他们能够通过抽象来使用它们而不直接引用它们.换句话说,我想要更宽松的耦合,并希望服务能够自主地生活并独立于System.Web.Http.随着项目的发展,它将帮助我实施单元测试和SOLID原则.

也许我在这里采取了错误的方法,但也许不是.我的主要目标是使用ASP.NET Web API创建一个可插入的微服务框架,每个微服务都作为一个独立的程序集.所以,如果有另一种推荐方法,我会全力以赴.

希望这是有道理的.有什么指针吗?对于它的价值,我对设计模式和SOLID原则的概念非常熟悉; 只是不确定如何将这一切串在一起,同时保持控制器本身提供的一些自动请求处理.

谢谢!

.net architecture asp.net design-patterns asp.net-web-api

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

拆分枚举标志以在集合中创建不同项目的有效方法

我有一个这样的集合:

IEnumerable<RecordToSend> recordsToSend;
Run Code Online (Sandbox Code Playgroud)

由以下几部分组成:

public class RecordToSend {
    public Guid ApplicationId { get; set; }
    public ScheduleTypes Schedule { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和标志枚举:

[Flags]
public enum ScheduleTypes
{
    None = 0,
    Daily = 1,
    Weekly = 2,
    Monthly = 4
}
Run Code Online (Sandbox Code Playgroud)

假设我有以下集合,它基本上是使用实体框架查询从数据库中提取的:

| ApplicationId | Schedule |
| ABC123        | 7        |
| DEF456        | 3        |
Run Code Online (Sandbox Code Playgroud)

将枚举拆分为多个不同记录的有效方法是什么,从而导致这种情况(可以使用类RecordToSend或其他类型,甚至是动态的,如果有意义的话):

| ApplicationId | Schedule |
| ABC123        | 1        |
| ABC123        | 2        |
| ABC123        | 4 …
Run Code Online (Sandbox Code Playgroud)

.net c# enums flags split

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