c# - Dynamics AX 移动应用程序

标签 c# azure dynamics-ax-2012 servicebus

在我们的组织中,我们正在尝试开发一个移动应用程序/网站作为 Dynamics AX 2012 的前端。我们遵循 MICROSOFT ( https://technet.microsoft.com/en-us/library/dn155874.aspx ) 建议的架构。

尽管 ACS 现已在 AZURE 中被弃用,但 Microsoft 建议的架构迫使我们使用我在向 Azure 团队请求后创建的 ACS。

Dynamics AX Architecture suggsted by Microsoft

按照文档执行的步骤:

我们已经设置了以下项目,但目前卡在一个地方:

  1. 设置在单个域上运行的三台 Windows 2012 R2 服务器 - 第一个用于 AX 和 DC,第二个用于 ADFS 服务器,第三个用于中间层 WCF 服务 - 单独完成并测试

  2. 使用在入站端口中公开的 AIF 服务设置 Dynamics AX 2012 服务器 - 完成 设置 ADFS 服务器并创建几个用户 - 完成,根据事件日志监听服务总线并使用 powershell 控制台测试身份验证。

  3. 创建一个示例控制台应用程序来调用 ADFS 以获取 token 并将其传递到 Azure 服务总线 - ADFS 返回 token ,ACS 返回 token

  4. 设置位于 AX 2012 和移动客户端之间的中间层服务 - 设置完成,服务总线抛出 404 错误

我已完成所有步骤,但当我尝试使用两个 token 联系服务总线时失败。以前有人这样做过吗?我想知道缺少什么?

对服务总线的后调用:

帖子网址:

https://xxxxx.servicebus.windows.net/ExpenseRest/Expense?Action=Create

标题:

Content-Type: application/json; charset=utf-8
Authorization: WRAP access_token="net.windows.servicebus.action=Send&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=http%3a%2f%2fFQDN.COM%2fadfs%2fservices%2ftrust&Audience=http%3a%2f%2finvmobile.servicebus.windows.net%2f&ExpiresOn=1503321191&Issuer=https%3a%2f%2fxxxxxxx-sb.accesscontrol.windows.net%2f&HMACSHA256=SS%SSS%SSSS%3d&wrap_access_token"
Host: xxxxxx.servicebus.windows.net
Content-Length: 4382
Expect: 100-continue

正文:

{"adfstoken":"adfs_encoded_token","expenseData":{"Amount":"100","Comments":"Expense of 100 INR","CurrenyCode":"EUR","Date":"08/18/2017"}

错误:

404, No service is hosted at the specified address

最佳答案

因此,如果您想使用 ACS,您基本上需要通过支持请求将该功能列入白名单。新推荐的连接方式是通过 SAS。现在,您在上面引用的文档建议构建 WCF 服务和/或服务总线监听器,这本质上是 .Net 代码。有一些图表,但我也引用了特别是在第 27 页左右的内​​容。

因此,如果您使用 .Net 代码工作,您基本上也可以立即实现 SAS,这比尝试使 ACS 工作更具前瞻性。

有关 SAS 的一些有趣的附加数据、如何实现、通过防火墙打开哪些端口等。

您需要打开的端口取决于您是否使用任何客户端或 SB Rest api。从文档看来,这些是必要的端口: https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-amqp-protocol-guide

Azure 服务总线始终要求使用 TLS。它支持通过 TCP 端口 5671 的连接,在进入 AMQP 协议(protocol)握手之前,TCP 连接首先用 TLS 覆盖,并且还支持通过 TCP 端口 5672 的连接,服务器立即使用 AMQP 规定的模型强制升级到 TLS 的连接。 AMQP WebSockets 绑定(bind)通过 TCP 端口 443 创建一条隧道,该隧道相当于 AMQP 5671 连接。

两个现代客户端都应该使用 AMQP。有一个较旧的客户端版本,埃森哲不太可能使用: 较旧的 .NET 库曾经在某些时候有一个自定义的、基于 WCF 的协议(protocol),该协议(protocol)使用 TCP over 9354(称为 SBMP,SB 消息传递协议(protocol)),并且有时可能使用称为 WebStreams 的较旧技术

如果您单独使用我们的其余 API,他们可能只能使用 443。 有关 SAS 的更多数据 https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-sas

关于c# - Dynamics AX 移动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45815049/

相关文章:

c# - 在 C# 中更改任何打开的窗体运行时的背景颜色

azure - 使用 KeyVault key 通过 PowerShell 部署 VM,无需明文转换

c# - 使用emgu cv将两个子图像添加到一个新图像中

c# - System.IO.FileNotFoundException : The Web application at http://SharePoint/could not be found. 验证您是否正确键入了 URL

c# - 大批量处理的多线程问题

azure - 从azure函数读取blob的内容

azure - 如何将保留历史记录(时间戳和版本)的 Databricks 表复制到新订阅中的另一个 Databricks?

axapta - Dynamics AX 2012 - 将表添加到数据库记录选择列表

axapta - 设置为等待我的开发服务器时批处理作业未运行

axapta - 设置 CommandButton 以了解要操作哪个网格