小编How*_*amp的帖子

.NET应用程序服务器与Java应用程序服务器之间的差异

我想更好地理解.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世界中提供的功能类似的功能.

几个问题:

  1. 为什么Microsoft与Java方法的根本区别在于应用程序服务器?在创建这些框架时,这必须是架构/设计选择.
  2. 每种方法的优缺点是什么?
  3. 为什么Microsoft将MTS托管模型(类似于Tomcast servlet托管模型)转移到更常见的当前方法,即将业务对象作为Web服务器的ASP.NET进程的一部分?
  4. 如果你想在今天的ASP.NET应用程序中实现MTS类型方法或Tomcat类型方法,我假设一个常见的模式是在某些IIS进程中托管业务对象(可能在某些不同的物理或逻辑层上)并通过WCF访问(或标准的asmx Web服务,无论如何).这是正确的假设吗?

asp.net tomcat web-applications mts

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

从Visual Studio 2013部署Azure webjobs时未包含某些程序集

我有一个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不会执行.

这个用户是错误还是其他什么?

.net azure visual-studio visual-studio-2013 azure-webjobs

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

是否有扫描执行某些操作的作业表的标准模式?

(我意识到我的头衔很差.如果在阅读完问题之后你会有所改进,请编辑或告诉我,我会改变它.)

我有一个相对常见的工作表场景,其中有一行需要完成.例如,它可以是要发送的电子邮件列表.该表看起来像这样:

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首选)定期"扫描"(我非常松散地使用术语"扫描")这个表,找到未完成的项目,执行操作一旦成功完成标记就完成了.

除了完成上述步骤的基本过程外,我还在考虑以下要求:

  • 我想要一些"线性扩展"的方法,例如同时运行多个"工作进程"或线程或其他任何方式.(只是一个特定的技术思想 - 我假设由于这个要求,我需要一些方法将项目标记为"正在进行中"以避免多次尝试该操作.)
  • 表中的每个项目只能执行一次.

其他一些想法:

  • 我并不特别关心数据库中的实现(例如,在T-SQL或PL/SQL代码中)与一些外部程序代码(例如,独立的可执行文件或由网页触发的某些操作)相关的执行数据库
  • "做行动"部分是同步还是异步完成并不是我正在考虑作为这个问题的一部分.

c# database sql-server algorithm

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

在为自动完成/迭代搜索提供结果时,如何优化数据库性能?

注意:在这个问题中,我使用术语"自动完成"(或"迭代搜索")来指代返回搜索结果类型的结果,例如Google搜索提供的结果.此外,我的问题不是特定于Web应用程序与胖客户端应用程序.

如何构建SQL SELECT查询以便为此类查询提供良好的性能,尤其是在任意大型数据集上?在搜索将仅基于前n个字符(最简单的情况)查询的情况下,我仍然在每个按键上发出新的 SELECT结果FROM sometable WHERE条目LIKE .... 即使有各种形式的缓存,这似乎可能导致性能不佳.

如果您希望搜索字符串返回带有前缀匹配,子字符串匹配等的结果,则这是一个更加困难的问题.查看搜索联系人列表的情况,您可能会返回与FirstName + LastName,LastName + FirstName或任何其他子字符串匹配的结果.

sql performance autocomplete

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

获取错误'(400)错误请求:指定的阻止列表无效.将文本上载到Azure Blob存储时

我实现了以下代码以将文本上载到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编码的.

.net azure-blob-storage

5
推荐指数
0
解决办法
435
查看次数

PetaPoco.Database实现了IDisposable,那么为什么大多数示例都没有'using'语句?

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对象应该如何实际交付?

.net c# dispose idisposable petapoco

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

与等效的 Webjobs 相比,队列触发的 Azure Functions 的等待时间非常长

我已将队列触发的 Azure Webjobs 迁移到 Azure Functions。根据我的测量,使用函数从队列中取出消息的等待时间是 5 到 60 倍以上(是的)。

在 Webjob 领域,我观察到 BatchSize、NewBatchThreshold 和 MaxPollingInterval 处于默认值时,队列等待时间通常为亚秒级。

使用我的函数,我看到队列等待时间经常超过 45-60 秒。队列中的项目数与等待时间之间存在相关性。如果队列中的项目数为低个位数,则等待时间过长,即。60 秒以上。尽管我尝试了 BatchSize 和 NewBatchThreshold 的许多不同组合。

一些具体细节:

  • webjobs 是 .NET Core 3.1
  • 函数是 v3 和 .NET Core 3.1
  • 我已经尝试了 Consumption Plan 和 App Service 计划上的 Functions,但我发现等待时间没有区别

为了获得一些科学测量值,我检测了我的函数来记录消息排队的时间以及从队列中检索消息的时间,以获得经过的时间。为了进一步消除变量,我创建了几个完全空的函数——也就是说,队列触发方法的主体只包含记录时间的代码。我在这里也看到了大量的等待时间。

如果我采用队列触发方法并将它们复制并粘贴到 Azure webjob 中,队列等待时间将变为 1 秒或更短。

任何指导?

.net c# webjob azure-functions queuetrigger

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

无论实际响应如何,Polly 重试策略结果始终成功

我正在尝试利用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),但“喇嘛”是不是在结果身体。

.net c# restsharp polly

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

node.js在客户端< - > Web服务器流中的位置?

关于node.js如何适应客户端和Web服务器,下面我的描述是否正确?

  • (A)是客户
  • (B)是在某个Web服务器上运行的node.js.
  • (C)是托管业务逻辑,数据库访问例程的"服务",例如"GetCustomer()".为简单起见,假设服务(C)公开REST接口.

因此,在流程中,客户端(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

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

无法调试Azure webjobs - webjob进程未显示在"附加到进程"对话框中

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

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