我编写了一个逻辑应用程序,它使用本地网关在本地数据库中执行存储过程。在SQL Server Management Studio中,我将结果作为完整的xml对象获取。
但是当我在Azure逻辑应用程序中执行该存储过程时,我将同一个xml对象的结果拆分为多个json对象,而不是一个内部有完整xml字符串的json对象。
在SQL Server Management Studio中,我在SQL select语句后面有var s = Container.Resolve<SampleClass>();
s.ConnectivitySyncMainLHBackgroundingCode();
。
为什么会这样,我该如何解决这个问题?
下面是截图:
答案 0 :(得分:0)
我通过实现简单的Function App来解决类似的问题来修复输出。
在我的例子中,它是由SQL查询FOR JSON AUTO生成的JSON,但您应该能够将它应用于XML。以下文章提到
A large result set splits the long JSON string across multiple rows.
我实现了一个简单的Function App来处理输出并将其合并为单个JSON有效负载。
这是我的函数的代码,它是一个通用的Webhook函数:
public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info($"ProcessSentimentJson was triggered!");
string jsonContent = await req.Content.ReadAsStringAsync();
StringBuilder sb = new StringBuilder();
JArray array = JArray.Parse(jsonContent);
List<string> list = array.Select(p => (string)p["JSON_F52E2B61-18A1-11d1-B105-00805F49916B"]).ToList();
foreach (var l in list)
sb.Append(l);
return req.CreateResponse(HttpStatusCode.OK, sb.ToString());
}
然后您可以将其添加到您的Logic App中,传递存储过程中的结果并在下一个活动中使用输出:
快乐的编码!
答案 1 :(得分:0)
Jakub的解决方案确实是解决它的一种方法,但需要额外的成本(用于调用函数的azure函数和逻辑app动作)。
另一种方法是将SQL作为base64字符串从SQL返回。这样您就可以在Logic App中使用base64ToString和xml函数。
答案 2 :(得分:0)
Azure功能解决方案运行良好,我只是编码它的描述方式。唯一困难的部分是让参考在azure中工作。注意:这适用于任何类型的字符串数据,我在我的情况下使用XML。
这是我使用的代码:
#r "Newtonsoft.Json"
#r "System.Xml.Linq"
#r "System.Linq"
using System;
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Text;
using System.Xml.Linq;
using System.Linq;
public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info($"Webhook Combine Messages was triggered!");
string jsonContent = await req.Content.ReadAsStringAsync();
StringBuilder sb = new StringBuilder();
JArray array = JArray.Parse(jsonContent);
List<string> list = array.Select(p => (string)p["XML_F52E2B61-18A1-11d1-B105-00805F49916B"]).ToList();
foreach (var l in list)
sb.Append(l);
return req.CreateResponse(HttpStatusCode.OK, sb.ToString());
}