我想更好地理解.NET的应用服务器模型与大多数Java应用服务器使用的原因相比的原因.
在大多数情况下,我见过ASP.NET Web应用程序,业务逻辑托管在Web服务器的asp.net主机进程中.另一种常见方法是拥有一个物理或逻辑上不同的层,它承载您的业务对象,然后作为Web服务公开或通过WCF等机制访问.后一种方法通常但并不总是在需要更高规模时使用.在COM对象的时代,我见过Microsoft Transaction Server(MTS)以及后来用于托管包含业务逻辑的COM对象的COM +托管,MTS(理论上)管理对象生存期,事务,并发yada yada.这个模型似乎在ASP.NET领域似乎已经消失了.
在Java世界中,您可能将Apache与Tomcat一起作为servlet容器,并将业务对象托管在Tomcat中.在这种情况下,Tomcat提供与MTS在.NET世界中提供的功能类似的功能.
几个问题:
我有一个Visual Studio 2013类库项目,目录结构如下:
\MyClassLibraryProject
\ExternalLibraries
3rdPartyLib.dll
\bin
\Debug
\Release
etc.
Run Code Online (Sandbox Code Playgroud)
在ExternalLibraries里面我复制了一些第三方程序集,然后我从项目中引用了它(Copy local = true).我编译项目,在我的Release目录中,我当然看到我的MyClassLibraryProject.dll和第三方DLL,如3rdPartyLib.dll等.到目前为止很好.
然后我有另一个项目(控制台应用程序 - Azure webjob),我从中添加了对\ MyClassLibraryProject\bin\Release\MyClassLibraryProject.dll(Copy local = true)的引用.它看起来像这样:
\MyWebjob
\bin
\Debug
MyWebJob.exe
MyClassLibraryProject.dll
3rdPartyLib.dll
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,当我添加对MyClassLibraryProject.dll的引用(使用Copy local = true)时,它还复制了它的依赖程序集3rdPartyLib.dll.目前很好.
但是,将webjob项目发布到Azure时(右键单击"项目","发布..."),不会部署3rdPartyLib.dll .结果,webjobs仪表板抱怨它无法找到,当然webjob不会执行.
这个用户是错误还是其他什么?
(我意识到我的头衔很差.如果在阅读完问题之后你会有所改进,请编辑或告诉我,我会改变它.)
我有一个相对常见的工作表场景,其中有一行需要完成.例如,它可以是要发送的电子邮件列表.该表看起来像这样:
ID Completed TimeCompleted anything else...
---- --------- ------------- ----------------
1 No blabla
2 No blabla
3 Yes 01:04:22
...
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个标准的练习/模式(或代码 - C#/ SQL Server首选)定期"扫描"(我非常松散地使用术语"扫描")这个表,找到未完成的项目,执行操作一旦成功完成标记就完成了.
除了完成上述步骤的基本过程外,我还在考虑以下要求:
其他一些想法:
注意:在这个问题中,我使用术语"自动完成"(或"迭代搜索")来指代返回搜索结果类型的结果,例如Google搜索提供的结果.此外,我的问题不是特定于Web应用程序与胖客户端应用程序.
如何构建SQL SELECT查询以便为此类查询提供良好的性能,尤其是在任意大型数据集上?在搜索将仅基于前n个字符(最简单的情况)查询的情况下,我仍然在每个按键上发出新的 SELECT结果FROM sometable WHERE条目LIKE .... 即使有各种形式的缓存,这似乎可能导致性能不佳.
如果您希望搜索字符串返回带有前缀匹配,子字符串匹配等的结果,则这是一个更加困难的问题.查看搜索联系人列表的情况,您可能会返回与FirstName + LastName,LastName + FirstName或任何其他子字符串匹配的结果.
我实现了以下代码以将文本上载到Azure块blob:
CloudStorageAccount storageAccount = ...
CloudBlobClient blobClient = ...
CloudBlobContainer container = container.CreateIfNotExists();
CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob");
blockBlob.UploadText(blob);
Run Code Online (Sandbox Code Playgroud)
我会定期从UploadText()操作中获得以下异常:
远程服务器返回错误:(400)错误请求.在System.Net.HttpWebRequest.GetResponse()... RequestID:27e93ddb-0001-0011-2113-0966db002000 RequestDate:星期六,17十月2015 19:38:47 GMT StatusMessage:指定的阻止列表无效.错误代码:InvalidBlockList
我理解在上传blob时发送正确有序的块ID列表并具有一致的块ID长度的重要性,但鉴于UploadText隐藏了这些细节,我不会认为除非框架中存在错误,否则可能发生阻止列表问题.显然,在下面的内容中,UploadText()调用REST API并处理块,但同样,这些都是隐藏的.
我上传的文字介于1kB到15MB之间,并且是UTF-8编码的.
PetaPoco.Database对象实现了IDisposable,但我很少看到包含using语句的代码示例(包括在PetaPoco 自己的网站上),如下所示:
using (var db = new Database("MyConnectionString"))
{
// Do database stuff
}
Run Code Online (Sandbox Code Playgroud)
我经常看到:
var db = new Database("MyConnectionString");
// Do database stuff
// I never see .Dispose() called.
Run Code Online (Sandbox Code Playgroud)
PetaPoco.Database对象应该如何实际交付?
我已将队列触发的 Azure Webjobs 迁移到 Azure Functions。根据我的测量,使用函数从队列中取出消息的等待时间是 5 到 60 倍以上(是的)。
在 Webjob 领域,我观察到 BatchSize、NewBatchThreshold 和 MaxPollingInterval 处于默认值时,队列等待时间通常为亚秒级。
使用我的函数,我看到队列等待时间经常超过 45-60 秒。队列中的项目数与等待时间之间存在相关性。如果队列中的项目数为低个位数,则等待时间过长,即。60 秒以上。尽管我尝试了 BatchSize 和 NewBatchThreshold 的许多不同组合。
一些具体细节:
为了获得一些科学测量值,我检测了我的函数来记录消息排队的时间以及从队列中检索消息的时间,以获得经过的时间。为了进一步消除变量,我创建了几个完全空的函数——也就是说,队列触发方法的主体只包含记录时间的代码。我在这里也看到了大量的等待时间。
如果我采用队列触发方法并将它们复制并粘贴到 Azure webjob 中,队列等待时间将变为 1 秒或更短。
任何指导?
我正在尝试利用Polly处理任意结果条件的能力https://github.com/App-vNext/Polly/#step-1b-optionally-specify-return-results-you-want-to-处理。
在我的测试用例中,我使用RestSharp发出 HTTP 请求。这是我的示例代码:
var policy = Policy
.HandleResult<IRestResponse>(r => r.Content.Contains("bla"))
.Retry(2)
.ExecuteAndCapture(() =>
{
IRestClient client = new RestClient("https://httpbin.org/anything");
IRestRequest request = new RestRequest(Method.GET);
var response = client.Execute(request);
return response;
});
Run Code Online (Sandbox Code Playgroud)
对https://httpbin.org/anything的调用回响了一堆东西 - 确切的内容并不相关。正如您在谓词中看到的,我在结果正文中寻找字符串“bla”。
问题是,policy.Outcome是总是成功的(policy.Outcome == OutcomeType.Successful),但“喇嘛”是不是在结果身体。
关于node.js如何适应客户端和Web服务器,下面我的描述是否正确?
因此,在流程中,客户端(A)将从node.js(B)请求一些资源,该资源将依次将此请求(具有所有异步和事件的i/o良好性)分派给可能去的服务(C).获取一些客户信息并通过回调将其返回到node.js(B),然后node.js将该响应返回给客户端.
这是对的吗?
两个相关问题:
2. node.js如何知道将请求分派给哪个服务?你是否必须在node.js中创建镜像服务API的api"stubs",因为客户端不直接与服务对话?
3.如何在此架构中处理会话状态?

javascript asynchronous serverside-javascript evented-io node.js
Visual Studio 2013更新3.我已经手动将多个Webjobs部署到Azure(通过门户网站上传了一个包),也直接从Visual Studio发布.我正在测试的webjobs被设置为运行"Continuous"并且具有在while(true){}循环内运行的代码; 所以这个过程永远不会结束 webjobs运行正常,我在Webjobs仪表板日志输出屏幕中看到了它们的运行时输出.
我在网站上启用了远程调试.当我选择Debug,Attach to process时,webjob进程名称永远不会显示在列表中.我看到的只是远程调试器进程和w3wp.exe.

想法?
remote-debugging azure visual-studio-2013 azure-webjobs azure-webjobssdk
.net ×5
c# ×4
azure ×2
algorithm ×1
asp.net ×1
asynchronous ×1
autocomplete ×1
database ×1
dispose ×1
evented-io ×1
idisposable ×1
javascript ×1
mts ×1
node.js ×1
performance ×1
petapoco ×1
polly ×1
queuetrigger ×1
restsharp ×1
sql ×1
sql-server ×1
tomcat ×1
webjob ×1