2013-07-30 97 views
0

我試圖連接PHP中的Nav Web服務(接着是Blog)。在php中連接Nav Web服務

但它返回一個錯誤:

SOAP-ERROR: Parsing WSDL: Couldn't load from ' http://NavIP.com:7047/DynamicsNAV/WS/SystemService ' : Start tag expected, '<' not found.

你能告訴我在哪裏出了錯?

在此先感謝..

我的代碼是:

//client.php

 <?php 
require_once("NTLMStream.php"); 
require_once("NTLMSoapClient.php"); 
try 
{ 
// we unregister the current HTTP wrapper 
stream_wrapper_unregister('http'); 
// we register the new HTTP wrapper 
stream_wrapper_register('http', 'NTLMStream') or die("Failed to register protocol"); 
// Initialize Soap Client 
$baseURL = 'http://NavIp.Com:7047/DynamicsNAVPMS/WS/'; 
$client = new NTLMSoapClient($baseURL.'SystemService'); 
// Find the first Company in the Companies 
$result = $client->Companies(); 
$companies = $result->return_value; 
echo "Companies:<br>"; 
if (is_array($companies)) { 
    foreach($companies as $company) { 
    echo "$company<br>"; 
    } 
    $cur = $companies[0]; 
} 
else { 
    echo "$companies<br>"; 
    $cur = $companies; 
} 

} 
catch(Exception $ex) 
{ 
    echo $ex->getMessage(); 
} 
?> 

回答

0

我處理完全相同的問題,但還沒有找到,因爲他們的解決方案都回到這個相同的腳本。你的問題是你沒有得到任何結果,因爲401錯誤代碼(無法驗證),這正是我卡住的地方。該腳本最終使用CURL進行連接,但不知何故失敗。

+0

嗨伯恩哈德,我給錯域名的Y它沒有返回結果,現在工作的罰款。其實我已經在30日晚解決了這個問題,但Iam沒有在這裏更新解決方案。任何方式感謝給予迴應。 –

+0

謝謝Bernhard。 –

0

使用此

$client = new NTLMSoapClient(null, $baseURL.'SystemService'); 

您錯誤地提供基本URL這被視爲WSDL位置。在你的代碼中,似乎你正試圖提供服務端點。試試看。

你也可以使用像'Wireshark'這樣的數據包嗅探器來查看你的反應。預期的響應是一個xml,看起來好像沒有返回。也許它正在返回401未經授權的?這不是一個XML響應,這也可能是一個原因。

另外,其中define('USERPWD','user:pass');在你的代碼?你沒有使用認證?我有一種強烈的感覺,你只需要定義它。如果您使用的是域名,請確保您在用戶名字段中定義了「域名」部分。所以,'域\用戶:通過'。

這篇文章是好的:http://blogs.msdn.com/b/freddyk/archive/2010/01/19/connecting-to-nav-web-services-from-php.aspx