![Web服务 – 如何使用Cloud Functions的Cloud Functions编写SOAP服务?,第1张 Web服务 – 如何使用Cloud Functions的Cloud Functions编写SOAP服务?,第1张](/aiimages/Web%E6%9C%8D%E5%8A%A1+%E2%80%93+%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8Cloud+Functions%E7%9A%84Cloud+Functions%E7%BC%96%E5%86%99SOAP%E6%9C%8D%E5%8A%A1%EF%BC%9F.png)
概述我需要使用firebase函数实现soap web
服务. 我找到了一个名为soap-node soap-module-github的模块,看起来很有前途,因为它与express集成,而firebase说它使用express来进行http调用,但问题是,我不知道如何将该模块与firebase函数集成起来,firebase函数是客户端进行的http调用的处理程序,任何帮助都会非常有用. 这是我到目前为 我需要使用firebase函数实现soap web服务.
我找到了一个名为soap-node soap-module-github的模块,看起来很有前途,因为它与express集成,而firebase说它使用express来进行http调用,但问题是,我不知道如何将该模块与firebase函数集成起来,firebase函数是客户端进行的http调用的处理程序,任何帮助都会非常有用.
这是我到目前为止创建的代码:
@H_301_14@var fs = require('fs'),soap = require('soap'),express = require('express'),lastReqAddress; var server = express(); service = { StockQuoteService: { StockQuotePort: { GetLastTradePrice: function (args,cb,soapheader) { if (soapheader) return { price: soapheader.sometoken }; if (args.tickerSymbol === 'trigger error') { throw new Error('triggered server error'); } else if (args.tickerSymbol === 'Async') { return cb({ price: 19.56 }); } else if (args.tickerSymbol === 'SOAP Fault v1.2') { throw { Fault: { Code: { Value: "soap:Sender",Subcode: { value: "rpc:BadArguments" } },Reason: { Text: "Processing Error" } } }; } else if (args.tickerSymbol === 'SOAP Fault v1.1') { throw { Fault: { faultcode: "soap:ClIEnt.BadArguments",faultstring: "Error while processing arguments" } }; } else { return { price: 19.56 }; } },SetTradePrice: function (args,soapheader) {},IsValIDPrice: function (args,soapheader,req) { lastReqAddress = req.connection.remoteAddress; var valIDationError = { Fault: { Code: { Value: "soap:Sender",Subcode: { value: "rpc:BadArguments" } },Reason: { Text: "Processing Error" },statusCode: 500 } }; var isValIDPrice = function () { var price = args.price; if (isNaN(price) || (price === ' ')) { return cb(valIDationError); } price = parseInt(price,10); var valIDPrice = (price > 0 && price < Math.pow(10,5)); return cb(null,{ valID: valIDPrice }); }; setTimeout(isValIDPrice,10); } } } }; var wsdl = fs.readfileSync(__dirname + '/../wsdl/stockquote.wsdl','utf-8').toString(); server = express(); soapServer = soap.Listen(server,'/stockquote',service,wsdl);
这是stockquote.wsdl:
@H_301_14@<wsdl:deFinitions name="StockQuote" targetnamespace="http://example.com/stockquote.wsdl" xmlns:tns="http://example.com/stockquote.wsdl" xmlns:xsd1="http://example.com/stockquote.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"><wsdl:types> <xsd:schema targetnamespace="http://example.com/stockquote.xsd" xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"> <xsd:element name="TradePriceRequest"> <xsd:complexType> <xsd:all> <xsd:element name="tickerSymbol" type="string"/> </xsd:all> </xsd:complexType> </xsd:element> <xsd:element name="TradePrice"> <xsd:complexType> <xsd:all> <xsd:element name="price" type="float"/> </xsd:all> </xsd:complexType> </xsd:element> <xsd:element name="TradePricesubmit"> <xsd:complexType> <xsd:all> <xsd:element name="tickerSymbol" type="string"/> <xsd:element name="price" type="float"/> </xsd:all> </xsd:complexType> </xsd:element> <xsd:element name="valID" type="boolean"/> </xsd:schema></wsdl:types><wsdl:message name="GetLastTradePriceinput"> <wsdl:part name="body" element="xsd1:TradePriceRequest"/></wsdl:message><wsdl:message name="GetLastTradePriceOutput"> <wsdl:part name="body" element="xsd1:TradePrice"/></wsdl:message><wsdl:message name="SetTradePriceinput"> <wsdl:part name="body" element="xsd1:TradePricesubmit"/></wsdl:message><wsdl:message name="IsValIDPriceinput"> <wsdl:part name="body" element="xsd1:TradePrice"/></wsdl:message><wsdl:message name="IsValIDPriceOutput"> <wsdl:part name="body" element="xsd1:valID"/></wsdl:message><wsdl:portType name="StockQuotePortType"> <wsdl:operation name="GetLastTradePrice"> <wsdl:input message="tns:GetLastTradePriceinput"/> <wsdl:output message="tns:GetLastTradePriceOutput"/> </wsdl:operation> <wsdl:operation name="SetTradePrice"> <wsdl:input message="tns:SetTradePriceinput"/> </wsdl:operation> <wsdl:operation name="IsValIDPrice"> <wsdl:input message="tns:IsValIDPriceinput"/> <wsdl:output message="tns:IsValIDPriceOutput"/> </wsdl:operation></wsdl:portType><wsdl:binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="GetLastTradePrice"> <soap:operation soapAction="http://example.com/GetLastTradePrice"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="SetTradePrice"> <soap:operation soapAction="http://example.com/SetTradePrice"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> </wsdl:operation> <wsdl:operation name="IsValIDPrice"> <soap:operation soapAction="http://example.com/IsValIDPrice"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> </wsdl:operation></wsdl:binding><wsdl:service name="StockQuoteService"> <wsdl:port name="StockQuotePort" binding="tns:StockQuoteSoapBinding"> <soap:address location="http://localhost:5002/stockquote"/> </wsdl:port></wsdl:service>
我Google了很好,我只是找不到一些路径,我还搜索了Google功能和他们与soap的集成,因为firebase功能只是用于firebase的Google云功能
解决方法 查看node-soap的源代码,您应该能够直接将_requestListener传递给Cloud Function的onRequest函数:
@H_301_14@exports.stockquote = functions.https.onRequest(soapServer._requestListener) 总结
以上是内存溢出为你收集整理的Web服务 – 如何使用Cloud Functions的Cloud Functions编写SOAP服务?全部内容,希望文章能够帮你解决Web服务 – 如何使用Cloud Functions的Cloud Functions编写SOAP服务?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)