BizTalk - JSON Post WebService 导致 500 内部服务器错误
Posted
技术标签:
【中文标题】BizTalk - JSON Post WebService 导致 500 内部服务器错误【英文标题】:BizTalk - JSON Post WebService causes 500 Internal Server Error 【发布时间】:2019-01-03 06:06:51 【问题描述】:我在 BizTalk 中要求将数据发布到 Web 服务。 这些数据需要采用 JSON 格式——一旦发布,我希望得到相同格式的内容,但在收到任何内容之前,我一直遇到同样的问题。我花了大约一天的时间试图弄清楚它 - 我很确定它一定是我忽略的一些愚蠢的东西。
我已经使用 Postman 检查了端点,当我直接发布数据时没有任何问题。
我收到的错误如下;
xlang/s 引擎事件日志条目:未捕获的异常(请参阅下面的“内部异常”)已暂停服务“Orchestrations.STANDARD_OUT_WEBSERVICE(a064e1ce-3aec-fa09-9ceb-76b4447793a2)”的实例。服务实例将保持挂起状态,直到以管理方式恢复或终止。如果恢复,实例将从其上次持久状态继续,并可能重新引发相同的意外异常。 InstanceId:3766050c-3a20-44e0-ae96-5137ab9ce270 形状名称:ShapeId:异常从:段-1,进度-1 内部异常:处理消息时发生错误,请参阅详细信息部分以获取更多信息消息ID: ABD1094C-826C-42D6-8776-AE28044B9BBC 实例 ID:FC678BF5-BF84-4069-8385-00D0FD3547AE 错误说明:System.Net.WebException:(500)Microsoft.BizTalk.Adapter.Wcf 的内部服务器错误.Runtime.WcfClient`2.RequestCallback(IAsyncResult result) 异常类型:XlangSoapException 来源:Microsoft.XLANGs.BizTalk.Engine 目标站点:Void VerifyTransport(Microsoft.XLANGs.Core.Envelope, Int32, Microsoft.XLANGs.Core .Context) 下面是一个堆栈跟踪,用于标识 Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.VerifyTransport(Envelope env, Int32 operationId, Context ctx) 在 Microsoft.XLANGs.Core.Subscription.Receive( Segment s, Context ctx, Envelope& env, Boolean topOnly) at Mi crosoft.XLANGs.Core.PortBase.GetMessageId(订阅订阅,Segment currentSegment,Context cxt,Envelope& env,CachedObject location)在Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s,StopConditions) stopCond, Exception & exp)
消息的大致路线如下 业务流程 1 进行一些翻译,然后以 XML 格式(使用 Xml 传输)将消息发送到业务流程 2。业务流程 2 接收 XML 格式(使用 Xml 接收)消息并使用它来构建新的 JSON 格式消息。
HeaderBuild = @"Content-Type:application\json" + "\n" + "UserName:biztalk-service";
Endpoint = "https://www.example.com/update";
ScaleWebserviceULOut(Microsoft.XLANGs.BaseTypes.Address) = Endpoint;
ScaleWebserviceULOut(Microsoft.XLANGs.BaseTypes.TransportType) = "WCF-WebHttp";
InboundMessageWithHeaders = InboundMessage;
InboundMessageWithHeaders(WCF.Action) = Endpoint;
InboundMessageWithHeaders(WCF.SecurityMode) = "Transport";
InboundMessageWithHeaders(WCF.HttpMethodAndUrl) = "POST";
InboundMessageWithHeaders(WCF.HttpHeaders) = HeaderBuild;
然后此消息被推送到动态发送-接收端口,该端口在请求上使用自定义 JSON 编码器管道,并且当前在响应上使用 XML 接收(目前我什至没有达到这一点)。
消息毫无问题地路由到端口,并且肯定会转换为 JSON。 我在这个上搜索得很辛苦,我不确定我做错了什么。有什么想法吗?
【问题讨论】:
我建议你使用像 Fiddler 这样的代理并尝试捕获确切的请求/响应 谢谢 - 没想到这个 【参考方案1】:事实证明,我收到此错误的原因是...
HeaderBuild = @"Content-Type:application\json" + "\n" + "UserName:biztalk-service";
此内容类型不正确 - 将其更改为正斜杠可解决问题。
应用程序/json
感谢 ste-fu 将我指向 fiddler
【讨论】:
以上是关于BizTalk - JSON Post WebService 导致 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
BizTalk 2020 JSON 编码器生成对象的根数组,即以 [ ] 开头
BizTalk 中的 FHIR JSON 到 ORU HL7 映射
JSON 编码器生成 JSON 消息在 BizTalk 2016 中添加空引号字符
从 BizTalk WCF-WebHttp 适配器向 Mule 服务发布消息时出错:服务不支持内容类型应用程序/json