我知道这个网站的主要想法不是回答这类问题,但是几天后我就有机会申请一个初级(或者更准确地说是试用者)作为PHP程序员和这就是为什么我决定在这里发帖,希望它会变好。 与其他公司相比,公司有点大,所以众所周知,想要进入这个位置的人的考试是什么 - 它要么是 - 写一个分页脚本或某种SOAP服务。我对分页没有问题但是从现在起我从来没有过多地关注SOAP,现在我需要学习基础知识和SOAP服务,当与PHP一起使用时。给我申请的位置,没有人希望能展示出一些辉煌的东西,但我仍然需要基本的理解SOAP客户端和服务器服务,也许我现在甚至都不关心WSDL因为我认为我没有足够的时间来处理所有事情。 所以我有一个示例代码,很可能是我需要编写和解释的,如果我要编写SOAP服务:
客户端 -
<?php
if (isset($_REQUEST["cname"]) && isset($_REQUEST["cpass"]))
{
$cname = $_REQUEST["cname"];
$md5pass = md5( $_REQUEST["cpass"]);
$client = new SoapClient(null, array(
'location' => "http://localhost/test/BuildInSoapWithWSDL/server.php",
'uri' => "urn://localhost/test/BuildInSoapWithWSDL/",
'trace' => 1 ));
try
{
if ( $client->saveUserNameAndPass($cname, $md5pass))
{echo "Data updated!";}
else
{echo "Error updating data!";}
print "<pre>\n";
print "Request :\n".htmlspecialchars($client->__getLastRequest()) ."\n";
print "Response:\n".htmlspecialchars($client->__getLastResponse())."\n";
print "</pre>";
}
catch (Exception $e)
{
echo 'Exception: ', $e->getMessage(), "\n";
}
}
else
{
echo "Error!";
}
?>
服务器端 -
<?php
$server = new SoapServer(null, array('uri' => 'urn://localhost/test/BuildInSoapWithoutWSDL/'));
$server->addFunction("saveUserNameAndPass");
$server->handle();
function database_connect($host, $account, $password, $dbname)
{
$connect = mysql_connect($host, $account, $password);
$connect = mysql_select_db($dbname, $connect);
return $connect;
}
function saveUserNameAndPass($userName,$passWord)
{
try
{
if (database_connect("localhost", "saveuser", "123456", "savetask") == 1)
{
$userName = mysql_real_escape_string($userName);
$sql = "INSERT INTO accounts (name,passmd5) VALUES ('".$userName."','".$passWord."')";
$result = mysql_query($sql);
mysql_close();
if ($result)
{ return true;}
else
{ return false;}
}
else
{
return false;
}
}
catch (Exception $e)
{
return false;
}
}
?>
即使我有代码,我仍然对什么做什么知之甚少。所以我在编写SOAP服务时需要一些基本的解释,如果不能接受这个topci在这里讨论我会很感激这些来源事情从初学者的角度解释。
由于
答案 0 :(得分:0)
SOAP与您与MySQL数据库交互时的使用方式相同。我可以举例说明与 Atlassian JIRA Web应用程序的连接。
首先,您只需建立连接即可。您将需要一个包含所有内容的WSDL文件,其中包含此特定SOAP服务器允许您执行的所有功能:
try { $soapObject = new SoapClient('http://jira/rpc/soap/jirasoapservice-v2?wsdl'); }
catch(Exception $ex) { die('SOAP connection failed: '$ex->getMessage()); }
连接完成后,您只需使用即可。如果需要,请登录:
$authToken = $soapObject->login(JIRA_LOGIN, JIRA_PASS);
然后向服务器发送请求:
$jqlquery = "status not in (Closed,Resolved) and assignee = user");
try { $issues = $soapObject->getIssuesFromJqlSearch($authToken, $jqlquery, 20); }
catch(Exception $ex) { die('JIRA query failed: '$ex->getMessage()); }
研究结果:
foreach ($issues as $k => $v) { $users[$v->reporter] = array('fullname'=>$soapObject->getUser($authToken,$v->reporter)->fullname,'name'=>$v->reporter); }
$project = $soapObject->getProjectByKey($authToken,"PROJECT");
请注意,getIssuesFromJqlSearch,getUser,getProjectByKey等是特定于应用程序的命令(在这种情况下,JIRA RPC plugin documentation中描述了所有方法/函数)。
就是这样。你不需要“断开”,在加载完成时afaik,调用析构函数,自己关闭连接。