如何将XML文档以字节数组形式发送至.NET SOAP服务?
如何将XML字节数组传入.NET SOAP服务的请求中
嘿,咱们一步步来解决这个问题哈!首先得提醒你:你当前用PHP把XML转成逗号分隔的字节数字串,直接传到SOAP里的话,.NET后端大概率没法正确解析——因为**.NET的byte[]类型参数在SOAP协议里默认是用Base64编码字符串来传输的**,不是逗号分隔的数字列表哦。
第一步:调整PHP代码,生成符合规范的编码内容
不用绕弯子拆字节数组,直接把XML内容编码成Base64就好,这是SOAP传输二进制数据的标准操作:
// 读取XML文件到字符串 $xmlStr = file_get_contents('demo2.xml'); // 直接将XML字符串编码为Base64(这就等价于把字节数组转换成.NET能识别的格式) $encodedXml = base64_encode($xmlStr);
第二步:构造正确的SOAP信封
我猜你是要在<sample>节点下加一个<file>标签来放这个内容?原信封里没看到这个标签,所以调整后的SOAP请求应该是这样:
<Envelope xmlns="http://example/soap/envelope/"> <Body> <sample xmlns="http://example.org/"> <User>[你的用户名]</User> <Password>[你的密码]</Password> <!-- 把上面生成的$encodedXml的值放到这里 --> <file>{$encodedXml}</file> </sample> </Body> </Envelope>
为什么不用逗号分隔的字节数组?
如果你非要传逗号分隔的数字,那得先确认.NET后端的file参数是不是int[]类型——但一般处理文件内容的场景,后端都会定义byte[]类型,这时候Base64是最稳妥、符合SOAP规范的方式。
进阶:用PHP SOAP扩展自动处理请求
如果你的PHP环境开了SOAP扩展,完全不用手动拼XML,用SoapClient能省好多事:
// 替换成你的服务WSDL地址 $client = new SoapClient('http://example.org/your-service.wsdl'); $requestParams = [ 'User' => '你的用户名', 'Password' => '你的密码', 'file' => base64_encode(file_get_contents('demo2.xml')) ]; // 调用服务的sample方法 $response = $client->sample($requestParams);
这样SOAP扩展会自动帮你处理信封构造、编码这些细节,不容易出错。
内容的提问来源于stack exchange,提问作者Sushu1209
相关产品推荐
相关产品推荐

