小编Mar*_*ine的帖子

n层应用程序中的WCF服务层:性能考虑因素

当我去大学时,老师曾经说过,在结构良好的应用程序中,你有表示层,业务层和数据层.这是我听了超过5年.

当我开始工作时,我发现这是真的,但有时候只有三层以上更好.两三天前,我发现John Papa的这篇文章解释了如何在分层应用程序中使用Entity Framework.根据那篇文章你应该:

  • UI层和表示层(模型视图模式)
  • 服务层(WCF)
  • 业务层
  • 数据访问层

对我而言,服务层是我工作以来听过的最好的创意之一.然后,您的UI将完全从业务和数据层"双重连接".现在,当我通过查看提供的源代码深入研究时,我开始有一些问题.你能帮我解答一下吗?

问题#0:您认为这是一个很好的企业应用模板吗?

问题1:我应该在哪里托管服务层?它应该是Windows服务还是其他什么?

问题2:在提供的源代码中,服务层只公开了一个带有WSHttpBinding的端点.这是最具互操作性的绑定,但(我认为)在性能方面最差(由于对象的序列化和反序列化).你同意吗?

问题3:如果您在问题2中同意我的意见,您会使用哪种绑定?

期待着听到您的意见.周末愉快!

马尔科

architecture performance wcf

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

SQL Azure和索引

是的,SQL Azure会自动重建/重组索引吗?

我们在Sql Azure上有一个数据库,并且性能下降,我想这是一个都市传奇.

你能帮助我吗?

谢谢,马可

azure azure-sql-database

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

IdentityServer 3 + Asp.net身份:范围,声明和客户 - 澄清

我几乎要弄清楚身份验证和授权服务器架构的不同部分是如何工作的.我真的认为IdentityServer是一个很棒的软件.

我试图总结我的发现,为我的问题找到一个基础.

  1. IdentityServer使用OpenID Connect发出令牌.颁发的令牌是ID令牌和访问令牌.
  2. 通过使用OAuth 2.0流程向客户端请求令牌(如OpenID Connect协议所述).每个客户一个流程.
  3. 在流程开始期间,客户端请求范围集合(至少"openid",这是因为他必须声明已激活OpenID Connect流)
  4. 客户可以询问他有权要求的所有范围.使用IdentityServer的Entity Framework插件,此信息包含在ClientScope表中.如果客户端请求他未被授权请求的范围,则流程将被中断.
  5. 范围可能"包含"索赔.这意味着,如果范围包含一组声明,则每当向客户端颁发令牌时,此令牌也包含所有相应用户的声明.例如:让"角色"调用包含"角色"声明的范围.一旦客户端获得授权,收到的令牌将包含所有用户的角色(作为声明).
  6. 如果获得授权,每个请求的范围都在名为"范围"的索赔中"翻译".这意味着如果客户端请求例如定义的"api"范围,则生成的标识将至少具有值为"api"的称为"范围"的声明.

如果我写的所有内容都越来越不正确,我的问题就出现了:

  1. 如何在asp.net身份表(即AspNetUserClaims)上定义的声明与IdentityServer连接.对于我所看到的,匹配是在名称上进行的.这个结论是否正确?换句话说,如果我的客户端必须收到"角色"声明(因为他已经要求"角色"范围),IdentityServer的"Asp.Net Identity"插件是否会释放为经过身份验证定义的"角色"声明用户?
  2. 引用"EntityFramework"插件表,"ClientClaims"表的含义是什么?我无法理解索赔如何直接与客户联系......我缺少什么?
  3. 让我们假设在我的资源服务器中,我有一个受ResourceAuthorize属性保护的动作,如下所示:

    [ResourceAuthorize("Read","Orders")]

    在我的AuthorizationManager中,我检查是否存在声明"order_read"或声明"api".这些是我的AuthorizationServer中定义的两个不同的范围,一个用于"订单阅读",另一个用于完整的API访问.第一方可能会被第三方客户询问,而后者则不会.这是一个好习惯吗?

  4. 我无法理解我的客户端应该用id_token做什么.我应该忽略这个问题,因为我正在使用js库OIDC令牌管理器吗?安全控件是否由此库执行?

  5. 最后一个问题:当我的应用程序提供访问令牌时,ClaimsIdentity是如何生成的?是否可以说它是在验证Identity Server上的令牌后生成的?这是否意味着IdentityServer将获取访问令牌并将其转换为一组声明?

谢谢你的澄清!

马尔科

entity-framework asp.net-identity-2 identityserver3

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

Azure WebJobs - 基于用户的单例 WebJob

我需要在计划的时间段内为不同的用户运行一项作业(例如 CRM 同步)。此同步由另一个函数放入 ServiceBus 队列上的消息触发,该函数每 30 分钟由 TimerTrigger 触发一次。

现在我需要的是避免每个用户作业并行运行多次,即如果前一个作业未完成,我需要阻止同一用户处理同一作业。

让我们想象一下:

  • 早上09:00,TimerTrigger函数被执行。该功能决定了用户A和用户B必须同步。对于每个用户,ServiceBus 队列上都会放置一条消息。
  • 一旦消息放入 ServiceBus 队列,就会触发不同的 Azure WebJob。作业已生成并正在运行。
  • 09:10 用户 A 同步作业完成,而用户 B 的同步作业仍在运行。假设它在 09:30 仍在运行。
  • 09:30,TimeTrigger函数再次执行。该函数再次确定用户A和B必须同步。队列上的消息被再次放入。
  • 由于这两条消息,函数再次被触发两次,但当前用户 B 有两个并发函数正在运行。

如何避免这种情况?

我是否必须手动实现 Azure 租赁 Blob 的逻辑?

谢谢。

azure azure-queues azure-webjobs

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

MaxReceivedMessageSize:为什么单向调用客户端和服务器?

大家好,我正在尝试完全理解WCF配置选项.有一件事我完全不理解.为什么我要向客户端和服务器说MaxReceivedMessageSize是x KB?我的意思是我有一个服务,它暴露了一组点火即可(没有回调).客户为什么要知道MaxReceivedMessageSize有多少?如果我不告诉客户什么,会发生什么?它是否会使用默认大小,如果消息大于它超过?

谢谢,马可

wcf

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