我试图用异步套接字编程风格在C#中创建一个简单的Web服务器.目的非常狭窄 - 一个Comet服务器(http长轮询).
我已经运行了Windows服务,接受连接,将请求信息转储到控制台并将简单的固定内容返回给客户端.
现在,我无法找到一种可管理的策略来异步安全地解析请求数据.我以前写过同步LL1解析器.我不确定LL1 Parser对HTTP是否合适或必要.我不知道如何异步地标记输入流.我能想到的是每个客户端都有一个输入缓冲区,读入它,然后将其复制到StringBuilder并定期检查是否有完整的请求.但这似乎效率低下,可能导致难以调试/维护代码.
此外,完全接收请求和发送响应的连接有两个阶段 - 在这种情况下,在一些延迟之后.一旦请求得到验证并可操作,我才计划在长轮询管理器中注册连接.但是,行为不端的客户端可能会继续发送数据并填充缓冲区,因此我认为我需要在响应阶段继续监视并清空输入流,对吧?
对此有任何指导意见.
我想第一步是知道是否有可能异步地有效地标记网络流并且没有大的中间缓冲区.即使没有合适的解析器,创建令牌化器的相同挑战也适用于一次读取输入的"行",甚至读取直到双空行(一个大的令牌).我不想一次从网络读取一个字节,但我也不想读取太多字节而必须将它们存储在某个中间缓冲区中,对吧?
在这两个语句的关系数据库中是否可能出现死锁?我正在尝试简化我的问题和示例 - 请假设这些选择,我认为通常只需要可共享的读锁定,现在需要独占的读锁:
Concurrent Connection 1:
SELECT {...}
FROM A
JOIN B ON {...}
Concurrent Connection 2:
SELECT {...}
FROM B
JOIN A ON {...}
Run Code Online (Sandbox Code Playgroud)
也就是说,连接的顺序是否重要?SQL中的单个语句是原子的吗?首先锁定A然后在第一个语句中B和B先锁定然后在第二个语句中锁定A?
我想不是 - 我的直觉告诉我,这样的两个单一陈述不会陷入僵局,无论多么复杂.我相信一个声明作为一个整体被分析,并且需要锁定的资源使用一些确定性的全局顺序(即按字母顺序)被锁定.但我需要的不仅仅是一种直觉 - 我无法想出一种证明它的方法,而且我无法找到它.
我对MS SQL 2005很感兴趣,但我不认为这个问题是特定于实现的.
其次:由于它与MS SQL有关,我还想知道Common Table Expressions也有这种保证--CTE主要是语法上的好处(+递归),并由引擎整合到传统的单个语句中.
在NHapi中,如果我们不知道它是什么messageType(MSH#9),我们如何解析消息?
var parser = new NHapi.Base.Parser.PipeParser();
IMessage parsedMessage = parser.Parse(SampleMessage);
Run Code Online (Sandbox Code Playgroud)
parsedMessage
是NHapi.Base.Model.GenericMessage.V25
在运行时,我似乎无法在MSH标头中读取MessageType字段,然后将消息重新解析(?)为该消息类型.
由于缺乏文档和示例,我感到很沮丧.也许我离基地很远.我是HL7的新手,但在我尝试使用NHapi之前,我认为我对HL7规范的理解很好.
是否有任何转换器或技术可用于将Javascript 1.7代码及其新语言功能转换为Javascript 1.6?
我对迭代器生成器和yield
关键字最感兴趣.我使用的脚本引擎只有1.6,但迭代器生成器可以提供更好的代码.用手书写似乎很复杂.
我尝试用C#编写它,用ILSpy反编译,然后手动将其移植到Javascript.但那真是一团糟.
我已经搜索过这样一个转换器,但我什么都没找到 - 可能是由于在这种情况下搜索条件与不相关的结果共享.
问题:
关于在服务器端编译 TypeScript 代码,有没有办法获取单个 .ts 文件的所有引用路径的列表 - 或者更好的是整个编译(从单个 .ts 文件开始)?按顺序,最好。
如果可能的话,我更愿意使用现有的解析器,而不是使用新代码解析文件。
语境:
因为我认为它不完全存在,所以我想写:
所以在发布模式下,<tsb:typescript root="app.ts" runat="server" />
产生
<script type="text/javascript" src="app.ts?32490839"></script>
Run Code Online (Sandbox Code Playgroud)
其中交付的脚本是按需缓存的单文件脚本。
在调试模式下,未修改的标签会产生:
<script type="text/javascript" src="dependency1.ts?32490839"></script>
<script type="text/javascript" src="dependency2.ts?32490839"></script>
<script type="text/javascript" src="app.ts?32490839"></script>
Run Code Online (Sandbox Code Playgroud)
据我所知,TypeScript Visual Studio 插件和任何 Optimizer 捆绑程序都不支持这种操作模式。捆绑器的功能接近我的要求,但它们不会破坏缓存,也不会在没有烦人的显式捆绑文件的情况下进行单文件编译。
我不介意在编译脚本时的第一个请求时出现任何性能影响。除此之外,也许有一个非常重要的理由表明这种设置不应该或不能存在。如果这不能或显然不应该这样做,我也很感激这样的答案。
我在 StackOverflow 上看到过其他问题,这些问题在我的解释中都围绕着这个愿望,但没有像这个这样明确的问题,也没有相关的答案。
谢谢!
另外,在不同的进程中执行 tsc.exe 是我的 HttpHandler 在运行时编译的最佳方法还是有一种灵活、安全且简单的方法在进程内执行此操作?
使用在我的交互式会话中运行的 IIS Express 中的 System.Diagnostic.Process.Start(),我可以执行以具有校正功能的不同用户身份运行的程序。不幸的是,这似乎不适用于非交互式会话。
指定凭据时,Process.Start 在内部调用 CreateProcessWithLogonW(CPLW)。CreateProcessWithLogonW 不能从 Windows 服务环境(如 IIS WCF 服务)调用。它只能从交互式进程(由通过 CTRL-ALT-DELETE 登录的用户启动的应用程序)中调用。-从这个 SO 答案
我需要将此站点从应用程序池帐户发布到 IIS 8。所以我按照上面引用的答案的建议 CreateProcessAsUser 。我已经使用本地安全策略设置了服务帐户和代理帐户,并按照该答案中的建议重新启动 - 服务帐户可以替换令牌,修改配额,代理帐户可以批量登录(以及作为该测试的服务)。但我不能让它在IIS快递(或控制台测试应用程序)的工作,也不IIS 8.我已经试过运行的LOGON32_LOGON_BATCH
,LOGON32_LOGON_NETWORK_CLEARTEXT
以及LOGON32_LOGON_SERVICE
,甚至LOGON32_LOGON_INTERACTIVE
。我什至给了我自己的帐户“作为服务登录”和“作为操作系统的一部分”特权,没有任何变化——所有这些都在重新启动后进行了测试。
对于所有配置,我都从 IIS Express 收到“客户端不持有所需的特权”。在服务器上,我得到相同的运行控制台应用程序。但是发布应用程序,它似乎可以很好地启动该过程,但随后我似乎遇到了权限错误。
我想知道我的帐户在本地运行时缺少哪些权限,以便我可以正确调试它们(并最终找出我遇到的任何权限错误)。有什么办法可以确定吗?无论哪种方式,如果您知道问题所在,我也希望如此!
谢谢!
使用PhoneGap,phonegap run ios
在我的应用程序目录中的Windows 8上运行(作为管理员或不管理员)提供以下输出:
[phonegap] detecting iOS SDK environment...
[phonegap] using the local environment
[phonegap] adding the iOS platform...
{ [Error: C:\Users\Me\.cordova\lib\ios\cordova\3.5.0\bin\create: Command failed with exit code ENOENT] code: 'ENOENT' }
[error] C:\Users\Me\.cordova\lib\ios\cordova\3.5.0\bin\create: Command failed with exit code ENOENT
Run Code Online (Sandbox Code Playgroud)
我正在尝试将它与phonegap ios应用程序一起使用.怎么了?
谢谢!
使用迭代器,可以使用以下通用委托:
public delegate IEnumerable<TOut> MyDelegate<TIn>(TIn param1);
Run Code Online (Sandbox Code Playgroud)
使用C#5.0 CTP中的新async/await,我希望能够创建类似的委托,如下所示:
public delegate async TOut MyDelegate<TIn>(TIn param1);
Run Code Online (Sandbox Code Playgroud)
我找不到C#5.0规范或这方面的任何帮助.任何人都知道如何写这个或者如果它不能写,为什么?
谢谢!
关于异步CTP的一些相关问题:
我可以使用然后使用枚举器方法迭代Iterator Block(IEnumerable<T>
返回yield T
),以及.方法的模拟是什么?一个非调用方法如何接收和处理任何ed项然后呢?你能提供一个简短的例子吗?我只是没有看到它.GetEnumerator()
MoveNext()
Current()
async
async
await
ContinueWith()
此外,在下面的示例async
方法中,MyAwaitable
有一个GetAwaiter()
方法.如果GetAwaiter()
返回string
但THuh
不是string
,编译器不会抱怨.THuh
和之间存在什么类型的约束/期望GetAwaiter()
?
async Task<THuh> DoSomething()
{
var x = await new MyAwaitable("Foo");
var y = await new MyAwaitable("Bar");
return null;
}
Run Code Online (Sandbox Code Playgroud)请解释C#规范草案的以下行.是否async Task<T>
应该方法return
一default(T)
,将永远不会被使用?我看到一些似乎不符合此规则的示例 - 返回值似乎可以访问,值是非默认值.这个值无法访问吗?如果是这样,为什么尴尬难以接近的退货声明呢?
在具有
Task<T>
某些返回类型的异步函数中T
,return语句必须具有可隐式转换为的表达式T
,并且必须无法访问正文的端点.
谢谢!
如何LINQ的join ... into
和.DefaultIfEmpty()
合作,以表达左加入?
是.DefaultIfEmpty()
评估一次,还是n次?
async-ctp ×2
c# ×2
c#-5.0 ×2
asynchronous ×1
caching ×1
cordova ×1
duck-typing ×1
generator ×1
hl7 ×1
http ×1
iis ×1
ios ×1
javascript ×1
linq ×1
nhapi ×1
ondemand ×1
parsing ×1
permissions ×1
pinvoke ×1
sql ×1
stream ×1
tokenize ×1
typescript ×1
winapi ×1