前言
随着互联网的发展和应用,Web服务也越来越重要和广泛。而SOAP(简单对象访问协议)是一种基于XML的Web服务协议,用于在Web服务之间进行通信。SOAP跨越了不同平台、不同开发语言之间的应用程序通信的限制,可以进行消息传递、调用远程方法等操作。本篇文章将深入。
一、SOAP的基本概念和原理
SOAP是一种基于XML的协议,用于在Web服务之间进行通信。它定义了一种标准的XML格式,用于在Internet上不同的计算机之间传输消息。
SOAP消息由多个部分组成,其中最重要的是消息头和消息体。消息头包含了关于如何处理消息的一些元素,例如消息的接收者地址和安全性信息。消息体包含了实际传输的数据信息。
SOAP协议基于HTTP/HTTPS协议进行通信,HTTP/HTTPS的请求消息和响应消息分别对应SOAP的消息体。SOAP主要使用POST方法进行数据传输,而且消息必须使用XML格式进行编码。
二、如何调用SOAP服务
在前端调用SOAP服务时,需要了解SOAP服务的地址、端口号和命名空间等信息。另外,还需要使用SOAP协议的相应方法来创建请求消息并发送其请求,同时还要处理返回消息。
在JavaScript中,可以使用XMLHttpRequest对象来发送SOAP请求。需要创建XMLHttpRequest对象,然后设置请求方法、请求头和请求体等信息,最后发送请求并等待响应。当接收到响应消息时,需要使用JavaScript解析返回的XML数据。
以下是一个基本的JavaScript代码示例:
“`javascript
//创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
//创建请求消息体
var soapRequest = ” +
” +
” +
‘1‘ +
‘2‘ +
” +
” +
”;
//构造请求消息
xhr.open(‘POST’, ‘http://localhost:8080/calculator.ax’, true);
xhr.setRequestHeader(‘Content-Type’, ‘text/xml’);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
//解析响应消息
console.log(xhr.responseText);
} else {
console.error(xhr.statusText);
}
}
};
//发送请求
xhr.send(soapRequest);
“`
以上代码中,我们创建了一个XMLHttpRequest对象,然后设置请求方法为POST,请求头Content-Type为text/xml,请求体是一个SOAP消息。当响应消息返回时,通过JavaScript解析返回的XML数据。
三、如何操作SOAP服务
在接受SOAP响应后,前端可以使用XML DOM (文档对象模型) 来操作响应消息中的数据。XML DOM可以理解为一种对XML文档的编程接口,它定义了一组对象和方法,可用于访问XML文档中的节点和元素,以实现对XML数据的读取和修改。
以下是一个简单的基于XML DOM的代码示例,用于解析SOAP响应消息并获取数据:
“`javascript
//获取SOAP响应消息
var responseXml = xhr.responseXML;
//使用XML DOM操作响应数据
var result = responseXml.getElementsByTagName(‘AddResult’)[0].childNodes[0].nodeValue;
console.log(result); //输出结果为3
“`
以上代码中,我们使用XML DOM的getElementsByTagName方法来获取AddResult节点,然后再使用childNodes属性获取其之一个子节点的nodeValue属性,最终获取到SOAP服务返回的结果。
SOAP是一种基于XML的用于在Web服务之间进行通信的协议。在前端调用SOAP服务时,需要使用XMLHttpRequest对象来发送请求并处理返回消息。而且在接收到响应消息后,前端还可以使用XML DOM来操作消息中的数据。掌握这些基本概念和技术,可以帮助前端更好地调用和操作SOAP服务,提高Web应用程序的效率和性能。
相关问题拓展阅读:
- ios请求webservice接口的时候,soap请求体怎么弄的
- C#在调用平台数据服务时添加SOAP报文验证报错500哪位大佬帮忙看看?
ios请求webservice接口的时候,soap请求体怎么弄的
好了,假设现在你已经有关于soap的基础知识(没有也没关系,看了例子,再理解就更好理解了),下面我们开始做soap的例子.
之一步,建一个Hello_SOAP项目.
然后在Hello_SOAPViewController.h中添加如下代码
@interface Hello_SOAPViewController : UIViewController
{
IBOutlet UITextField *nameInput;
IBOutlet UILabel *greeting;
NutableData *webData;
NutableString *soapResults;
NSXMLParser *xmlParser;
BOOL recordResults;
}
@property(nonatomic, retain) IBOutlet UITextField *nameInput;
@property(nonatomic, retain) IBOutlet UILabel *greeting;
@property(nonatomic, retain) NutableData *webData;
@property(nonatomic, retain) NutableString *soapResults;
@property(nonatomic, retain) NSXMLParser *xmlParser;
-(IBAction)buttonClick: (id) sender;
– (void)getOffesetUTCTimeSOAP;
然后在Hello_SOAPViewController.xib中将两个输出口和一个动作连接局雹好,这个不用手把手吧?
在源闭Hello_SOAPViewController.m文件中加入以下方法 :
– (void)getOffesetUTCTimeSOAP
{
recordResults = NO;
//封装桐裂帆soap请求消息
NSString *soapMessage =
@”\n”
“\n”
“\n”
“\n”
“%@\n”
“\n”
“\n”
“\n”,nameInput.text
>;
NSLog(soapMessage);
//请求发送到的路径
NSURL *url =
“>;
NutableURLRequest *theRequest = ;
NSString *msgLength = >;
//以下对请求信息添加属性前四句是必有的,第五句是soap信息。
;
getOffesetUTCTime” forHTTPHeaderField:@”SOAPAction”>;
;
;
>;
//请求
NSURLConnection *theConnection = initWithRequest:theRequest delegate:self>;
//如果连接已经建好,则初始化data
if( theConnection )
{
webData = retain>;
}
else
{
NSLog(@”theConnection is NULL”);
}
}
这个方法作用就是封装soap请求,并向服务器发送请求.
代
码有注释.不重复讲解.soap并不难,难的是没有案例告诉我们怎么把其它平台的soap移植过来,这里我给出了代码,我相信对iphone开发人员的话
应该能看懂了.我在下面会把此案例的源代码附上.如果自己做不出来再看我的代码.如果我这样讲您觉得不够细,那说明您的iphone开发还不是太深入,那
么您应该用不到soap技术.可以飘过了.
下面的代码是接收信息并解析,显示到用户界面
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
;
NSLog(@”connection: didReceiveResponse:1″);
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
;
NSLog(@”connection: didReceiveData:2″);
}
//如果电脑没有连接网络,则出现此信息(不是网络服务器不通)
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@”ERROR with theConenction”);
;
;
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@”3 DONE. Received Bytes: %d”, );
NSString
*theXML = initWithBytes:
length: encoding:NSUTF8StringEncoding>;
NSLog(theXML);
;
//重新加载xmlParser
if( xmlParser )
{
;
}
xmlParser = initWithData: webData>;
;
;
;
;
//;
}
-(void)parser:(NSXMLParser
*)parser didStartElement:(NSString *)elementName namespaceURI:(NSString
*) namespaceURI qualifiedName:(NSString *)qName
attributes: (NSDictionary *)attributeDict
{
NSLog(@”4 parser didStarElemen: namespaceURI: attributes:”);
if( )
{
if(!soapResults)
{
soapResults = init>;
}
recordResults = YES;
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
NSLog(@”5 parser: foundCharacters:”);
if( recordResults )
{
;
}
}
-(void)parser:(NSXMLParser
*)parser didEndElement:(NSString *)elementName namespaceURI:(NSString
*)namespaceURI qualifiedName:(NSString *)qName
{
NSLog(@”6 parser: didEndElement:”);
if( )
{
recordResults = FALSE;
greeting.text
= stringWithFormat:@”第%@时区的时间是: “,nameInput.text>
stringByAppendingString:soapResults>;
;
soapResults = nil;
NSLog(@”hoursOffset result”);
}
}
– (void)parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@”—–start”);
}
– (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@”—–end”);
}
说明下:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
这个方法是存储接收到的信息
-(void)parser:(NSXMLParser
*)parser didEndElement:(NSString *)elementName namespaceURI:(NSString
C#在调用平台数据服务时添加SOAP报文验证报错500哪位大佬帮忙看看?
500错误是服务器内部错误,说明服务器段就没做好。当然有可能客户端的请求格式也有问题。
关于前端调soap服务器的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。