我正在尝试将现有的ASP.NET Web API项目(当前在IIS中托管)转换为可以使用SelfHost框架的项目.我对实际细节有点模糊,但我知道我可以在控制台窗口中运行自主服务器,然后在它上面运行服务.我遇到的问题是我的项目是MVC项目而不是控制台项目.我对控制台/ Windows应用程序的熟悉程度有限,因为我通常使用要在IIS中托管的项目.
我有点困惑的是我是否需要将Visual Studio中现有的Web API项目转换为新的控制台应用程序,或者是否有办法在解决方案中创建另一个控制台应用程序项目,该项目可以充当Web服务器Web API服务,或者更确切地说,是否有一种方法可以向现有MVC项目添加带有Main()入口点的控制台元素(覆盖Global.asax入口点).
搜索没有产生太多信息,可以帮助我填补这一知识空白.希望有人能指出我正确的方向.即使是在高水平.
在我们的应用程序中,我们使用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个数值应该只需要几毫秒.这里有更多的处理工作比我知道的还要多吗?
我实际上在我的逻辑中有另一个循环,它获得计算计数器的第二个值.这只会使情况变得更糟.:)
谢谢!
我把计数器检索包裹在一个秒表中,我对结果感到惊讶.阅读即使是简单的属性.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范围内有很多.我真的不明白这是怎么回事.当然,一个计数器值应该和其他值一样快,对吧?
我想知道是否有人可以帮助我在C#中使用正则表达式.我认为这很简单,但我一直在抨击我的大脑并且不太确定为什么我会遇到这么困难.:)
我已经找到了几个例子,但我似乎无法操纵它们去做我需要的东西.
我只需要匹配任何不是"www"的字母数字+破折号子域名字符串,而只需要匹配"."
另外,理想情况下,如果有人输入"www.subdomain.domain.com",我希望尽可能忽略www.如果没有,这不是一个大问题.
换句话说,我想匹配:
我不想匹配:
在我看来它应该很容易,但我遇到了"不匹配"部分的麻烦.
对于它的价值,这是在IIS 7 URL重写模块中使用,以重写所有非www子域.
谢谢!
我希望有人可以帮助我.这太痛苦了.我花了几个小时在上面,我的客户变得越来越沮丧.:(
我在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 …
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方式将文件写入文件系统?
我一直在阅读很多关于OpenID和OAuth的内容,但却无法就如何在基于服务的架构中使用它们进行一些联系.
这是我的情景:
我们正在创建的新API服务集应该处理所有事情,包括身份验证和授权.
我的问题是:
我想总结一下:
对不起,这些是基本问题,但我确信它们很容易回答.谢谢!
我正在使用ASP.NET Web API创建一个可插拔的项目框架.我有很多胆量已经弄明白但是我对架构的一部分有问题,我不完全确定如何解耦.
作为简化示例,我有以下内容:
现在,服务都引用了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原则的概念非常熟悉; 只是不确定如何将这一切串在一起,同时保持控制器本身提供的一些自动请求处理.
谢谢!
我有一个这样的集合:
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)