我从未使用过基于SOAP的服务,我不确定是否使用了以下的SOAP服务。
http://workforce.wifisocial.in/WebServicesMethods/EmployeesWebService.asmx?op=EmployeesLoginMethod
在这项服务中,我需要使用以下参数传递4个值: 用户名,密码,ipaddress和devicename。 输出采用JSON格式。
请帮助达到预期的效果。
答案 0 :(得分:1)
您只需要一个HTTP post请求并传递正确的XML数据并设置HTTP标头:
func soapRequest(username:String, password:String, ipAddress:String, deviceName:String){
if let url = NSURL.init(string: "http://workforce.wifisocial.in/WebServicesMethods/EmployeesWebService.asmx"){
let request = NSMutableURLRequest(URL: url)
let requestBody = "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><EmployeesLoginMethod xmlns=\"http://tempuri.org/\"><username>\(username)</username><password>\(password)</password><IpAddress>\(ipAddress)</IpAddress><deviceName>\(deviceName)</deviceName></EmployeesLoginMethod></soap:Body></soap:Envelope>"
request.HTTPMethod = "POST"
request.HTTPBody = requestBody.dataUsingEncoding(NSUTF8StringEncoding)
request.setValue("text/xml", forHTTPHeaderField: "Content-Type")
request.setValue("\"http://tempuri.org/EmployeesLoginMethod\"", forHTTPHeaderField: "SOAPAction")
NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) in
guard error == nil && data != nil else{
//handle error
return
}
if let responseString = String.init(data: data!, encoding: NSUTF8StringEncoding){
print("\(responseString)")
}
//..........
//Parse your XML response data
//.........
}).resume()
}
}
答案 1 :(得分:1)
愿这会帮到你
以下是在Objective-C中调用SOAP的方法:
NSURL *baseURL = [NSURL URLWithString:@"http://yourbaseURLxxxxxxxx"];
NSString *sSOAPMessage = [NSString stringWithFormat: @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
"<soap:Body>\n"
"<EmployeesLoginMethod xmlns=\"http://tempuri.org/\">"
"<username>iamiosguy@gmail.com</username>"
"<password>lovetocode</password>"
"<ipaddress>192.16.0.0</ipaddress>"
"<devicename>iPhone7</devicename>"
"</EmployeesLoginMethod>"
"</soap:Body>\n"
"</soap:Envelope>\n"];
NSLog(@"-----Developed Envelope----%@",sSOAPMessage);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:baseURL];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[sSOAPMessage dataUsingEncoding:NSUTF8StringEncoding]];
[request addValue:@"http://tempuri.org/IService/EmployeesLoginMethod" forHTTPHeaderField:@"SOAPAction"];
[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"Data string = %@",string);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%s: AFHTTPRequestOperation error: %@", __FUNCTION__, error);
}];
[operation start];
答案 2 :(得分:0)
输出也将是我在服务定义中看到的肥皂。
我假设您想要使用c#从另一台服务器调用该函数,截至编写时,没有任何关于所用技术的指示。您需要添加wcf引用并使用生成的类调用该方法。
在当前解决方案中添加对服务的引用 在“解决方案资源管理器”中,右键单击要将服务添加到的项目的名称,然后单击“添加服务引用”。 将出现“添加服务引用”对话框。 单击发现。 当前解决方案中的所有服务(包括WCF数据服务和WCF服务)都将添加到“服务”列表中。 在“服务”列表中,展开要使用的服务的节点,然后选择实体集。 在“命名空间”框中,输入要用于引用的命名空间。 单击“确定”以添加对项目的引用。 生成服务客户端(代理),并将描述该服务的元数据添加到app.config文件中。
MSDN How to: Add, Update, or Remove a WCF Data Service Reference
如果您是从javascript发布的,这里有一个vanilla js示例。
var soap_post_body = ""+
'<?xml version="1.0" encoding="utf-8"?>' +
'<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+ 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">'+
' <soap12:Body>'+
' <EmployeesLoginMethod xmlns="http://tempuri.org/">'+
' <username>string</username>'+
' <password>string</password>'+
' <IpAddress>string</IpAddress>'+
' <deviceName>string</deviceName>'+
' </EmployeesLoginMethod>'+
' </soap12:Body>'+
'</soap12:Envelope>';
xhr = new XMLHttpRequest();
xhr.open('POST', 'http://workforce.wifisocial.in/WebServicesMethods/EmployeesWebService.asmx');
xhr.setRequestHeader('Content-Type', 'application/soap+xml; charset=utf-8');
xhr.onload = function() {
if (xhr.status === 200) {
console.log(xhr.responseText);
}
else {
console.log(xhr.status);
}
};
xhr.send(encodeURI(soap_post_body));
&#13;