2

PHP の soapclient 呼び出しに関するヘルプを探しています。

呼び出しはリモート パネルに対するもので、ログ データを取得したいと考えています。WSDL を介してさまざまなサービスが公開されており、いくつかは問題なく使用できます。リストは次のとおりです。

array(12) { 
[0]=> string(77) "GetGPTimerChannelsResponse GetGPTimerChannels(GetGPTimerChannels     $parameters)" 
[1]=> string(74) "GetGPTimerChannelResponse GetGPTimerChannel(GetGPTimerChannel $parameters)" 
[2]=> string(74) "SetGPTimerChannelResponse SetGPTimerChannel(SetGPTimerChannel $parameters)" 
[3]=> string(47) "GetSlaveResponse GetSlave(GetSlave $parameters)" 
[4]=> string(71) "GetLogDataInlineResponse GetLogDataInline(GetLogDataInline $parameters)" 
[5]=> string(71) "GetLogItemInlineResponse GetLogItemInline(GetLogItemInline $parameters)" 
[6]=> string(59) "GetAlarmListResponse GetAlarmList(GetAlarmList $parameters)" 
[7]=> string(50) "GetSyslogResponse GetSyslog(GetSyslog $parameters)" 
[8]=> string(47) "SetSlaveResponse SetSlave(SetSlave $parameters)" 
[9]=> string(53) "GetVersionResponse GetVersion(GetVersion $parameters)" 
[10]=> string(53) "GetTDBInfoResponse GetTDBInfo(GetTDBInfo $parameters)" 
[11]=> string(53) "GetLogItemResponse GetLogItem(GetLogItem $parameters)" } 

4 つのパラメーターを必要とする GetLogDataInline サービスを使用しようとしています。これらは配列として渡しており、接続時にすべて問題ないようです (要求/応答の処理には約 30 秒かかります)。

結果の var_dump / print_r を見ると、NULL が返されますが、__getLastResponse を呼び出すと、ローカル データベースに入力する必要があるすべてのデータがそこにあります。

以下は、soapclient 呼び出しのコードです。

$client = new soapclient ("http://192.168.1.126/cgi-bin/cgi.cgi?WSDL", 
array("trace" => 1,
"exceptions" => true,
"cache_wsdl" => WSDL_CACHE_NONE,
"features" => SOAP_SINGLE_ELEMENT_ARRAYS
));
$params = array (
        "ResponseType" => "Xml",
        "Step" => 15,
        "Start" => "2012-06-14T12:00:00+01:00",
        "End" => "2012-06-14T23:59:45+01:00"
);  
$result = $client -> GetLogDataInline ($params);

var_dump / __getLastResponse からの抜粋は次のとおりです。

var_dump($client)
object(SoapClient)#1 (4) { ["trace"]=> int(1) ["_features"]=> int(1) ["_soap_version"]=>  int(1) ["sdl"]=> resource(4) of type (Unknown) }

var_dump($result)
NULL

__getLastResponse

<?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> <GetLogDataResponse xmlns="http://url/RDMPlantTDB/2009/03/13/">  
<GetLogDataResult> 
<Step>15</Step> 
<Start>2012-06-14T12:00:00+01:00</Start> 
<End>2012-06-14T23:59:45+01:00</End> 
<LogData>
<![CDATA[<?xml version="1.0" encoding="UTF-8" ?> 
<Data> 
<Fields> <Field>External Temperature</Field> <Field>Workshop Lux Level</Field> <Field>Electricity Pulse 100wh</Field> <Field>Workshop PIR Active</Field> <Field>Boiler Flow Temp</Field> <Field>Outside Lux</Field> <Field>Workshop_Light_Override_Hours</Field> <Field>Water Consumption (Litres)</Field> <Field>Electricity kWh Consumption</Field> <Field>Water Consumption M3</Field> <Field>Gas kWh Consumption</Field> <Field>Outside Lighting</Field> <Field>Heating Effective Setpoint</Field> <Field>Router Reset</Field> <Field>Workshop Lighting State</Field> <Field>Heating Run Hours</Field> <Field>Heating On</Field> <Field>Receptin Percent RH</Field> <Field>Reception Temp</Field> <Field>Reception RH</Field> <Field>Reception Temp</Field> </Fields> 
<Entries> <Entry> <Time>2012-06-14T12:00:00+01:00</Time> <Values> <Value>-85.6</Value> <Value>2.1</Value> <Value>-1.0</Value> <Value>Off</Value> <Value>-91.5</Value> <Value>13.8</Value> <Value>0.0</Value> <Value>-1.0</Value> <Value>0.0</Value> <Value>0.0</Value> <Value>-0.1</Value> <Value>Off</Value> <Value>21.0</Value> <Value>Off</Value> <Value>Off</Value> <Value>0.0</Value> <Value>Off</Value> <Value>53.0</Value> <Value>22.0</Value> <Value>53.0</Value> <Value>22.0</Value> </Values> </Entry> <Entry> <Time>2012-06-14T12:00:15+01:00</Time> <Values> <Value>-85.4</Value> <Value>2.1</Value> <Value>-1.0</Value> <Value>Off</Value> <Value>-91.8</Value> <Value>13.8</Value> <Value>0.0</Value> <Value>-1.0</Value> <Value>0.0</Value> <Value>0.0</Value> <Value>-0.1</Value> <Value>Off</Value> <Value>21.0</Value> <Value>Off</Value> <Value>Off</Value> <Value>0.0</Value> <Value>Off</Value> <Value>53.0</Value> <Value>22.0</Value> <Value>53.0</Value> <Value>22.0</Value> </Values> </Entry> <Entry> <Time>2012-06-14T12:00:30+01:00</Time> <Values> <Value>-85.4</Value> <Value>2.1</Value> <Value>-1.0</Value> <Value>Off</Value> <Value>-91.8</Value> <Value>13.8</Value> <Value>0.0</Value> <Value>-1.0</Value> <Value>0.0</Value> <Value>0.0</Value> <Value>-0.1</Value> <Value>Off</Value> <Value>21.0</Value> <Value>Off</Value> <Value>Off</Value> <Value>0.0</Value> <Value>Off</Value> <Value>53.0</Value> <Value>22.0</Value> <Value>53.0</Value> <Value>22.0</Value> </Values> </Entry> <Entry> <Time>2012-06-14T12:00:45+01:00</Time> <Values> <Value>-85.4</Value> <Value>2.1</Value> <Value>-1.0</Value> <Value>Off</Value> <Value>-91.5</Value> <Value>13.7</Value> <Value>0.0</Value> <Value>-1.0</Value> <Value>0.0</Value> <Value>0.0</Value> <Value>-0.1</Value> <Value>Off</Value> <Value>21.0</Value> <Value>Off</Value> <Value>Off</Value> <Value>0.0</Value> <Value>Off</Value> <Value>54.0</Value> <Value>22.0</Value> <Value>54.0</Value> <Value>22.0</Value> </Values> </Entry> <Entry> 
4

3 に答える 3

1

NULL を取得する理由はわかりませんが、SOAP クライアントには常に以下のメソッドを使用してエラーを処理します (存在する場合)。

// Calling soap
try{

    // Creating soap server object
    $client     =   new SoapClient("http://192.168.1.126/cgi-bin/cgi.cgi?WSDL");

    // Creating parameters
    $params = array (
        "ResponseType" => "Xml",
        "Step" => 15,
        "Start" => "2012-06-14T12:00:00+01:00",
        "End" => "2012-06-14T23:59:45+01:00"
    );

    // Calling createUser method
    $result     =   $client->__soapCall('METHOD_NAME',$params);

    // Check for a fault
    if (is_soap_fault($client)) {       
        echo '<h2>Fault</h2><pre>';
        print_r($result);
        echo '</pre>';      
    }else{
        echo "Result: <BR><pre>";
        print_r($result);
        echo '</pre>';
    }

}catch(SoapFault $fault){
    $error      =   "SOAP Fault: (faultcode: {$fault->faultcode}\n" ."faultstring: {$fault->faultstring})"; 
    echo $error;
}catch(Exception $exception){
    $error      =   $exception; 
    echo "<BR>".$error;
}

上記の例では、パラメーターを取得して結果を返すために、METHOD_NAME を SOAP サーバーで定義された実際のメソッドに置き換える必要があります。しかし、最初のパラメーター「ResponseType」で疑わしいのは、リクエストを処理するメソッドによって期待される実際の最初のパラメーターですか?

上記のコードを実行してみて、どのようなエラーが発生するかを確認できます

サーバーでSOAP拡張機能が有効になっていると仮定します。

于 2012-06-18T10:22:12.890 に答える
0

| Web サービスでアクセス許可が有効になっている場合 | 新しい SoapClient - 最初の質問? パブリック IP public または DNS を使用 | $result = $client -> Method($params); - 2 番目の質問は? プライベート IP を使用します。DNS の構成に依存します

$client->__setLocation('http:// youDNSorIPpublic /cgi-bin/cgi.cgi');
var_dump($client);

//$old_location = $client->__setLocation(); // ロケーションを無効にする //echo $old_location;

$result = $client -> Method($params); //new request
于 2014-11-25T15:48:54.580 に答える
0

PHP soapClient は、SOAP 内の相対名前空間をあまりサポートしていません。通常、これがこの動作の原因です。

于 2012-06-29T19:49:12.063 に答える