如何在WebService间获取bsRequest并转换为XML格式
解决WebService接收Post字节数据并转换为XML的问题
首先得指出你当前WebService 2的代码逻辑走偏了:你的Getdata方法现在是主动去请求另一个外部URL,这和接收WebService 1发送过来的Post数据完全无关。我们需要调整逻辑,直接从当前的HTTP请求中读取WebService 1传递的bsRequest字节数组。
下面是具体的修改步骤和代码:
步骤1:重构WebService 2的Getdata方法
我们需要通过HttpContext.Current.Request获取当前请求的输入流,这个流里就存着WebService 1发过来的bsRequest字节数据。
修改后的WebService 2完整代码
using System.IO; using System.Web; using System.Xml.Serialization; using System.Text; [WebMethod] public string Getdata() { // 获取当前请求的输入流 Stream requestStream = HttpContext.Current.Request.InputStream; // 重置流指针到起始位置(避免因流已被读取导致数据丢失) requestStream.Position = 0; // 读取流中的全部字节数据 byte[] receivedBytes = new byte[requestStream.Length]; requestStream.Read(receivedBytes, 0, receivedBytes.Length); // 把字节数组转换为XML字符串(和WebService 1保持UTF-8编码一致) string xmlContent = Encoding.UTF8.GetString(receivedBytes); // 可选:直接反序列化为EPCISDocumentType对象(和WebService 1的类型对应) // 注意:要确保WebService 2能访问到EPCISDocumentType这个类型(可放到共享类库或重复定义结构) EPCISDocumentType epcisDoc = null; using (MemoryStream ms = new MemoryStream(receivedBytes)) { XmlSerializer xmlSerializer = new XmlSerializer(typeof(EPCISDocumentType)); epcisDoc = (EPCISDocumentType)xmlSerializer.Deserialize(ms); } // 可根据需求返回XML字符串、处理后的对象,或其他XML格式结果 return xmlContent; }
关键细节说明
- 请求流的获取:
HttpContext.Current.Request.InputStream是Post请求的载体,WebService 1发送的bsRequest字节数组就存在这里。 - 编码一致性:WebService 1指定了
"text/xml; charset=utf-8",所以转换字符串时必须用UTF8编码,否则会出现乱码。 - 对象反序列化:如果需要直接还原成
EPCISDocumentType对象,只需复用WebService 1的XmlSerializer逻辑即可,前提是WebService 2能访问到这个类型定义。
额外注意点
- 确认WebService 1的
DoPost方法已正确发送字节数据,且Content-Type设置无误(你当前的代码已经设置了正确的类型,没问题)。 - 如果WebService 2需要返回XML格式数据给WebService 1,直接返回XML字符串或序列化后的对象即可(ASMX WebService会自动处理XML序列化逻辑)。
内容的提问来源于stack exchange,提问作者Ngoc Duy
相关产品推荐
相关产品推荐

