2012-08-05 16 views
0

我正在製作php/c#控制檯應用程序/ c#soap服務,並且在Web服務中創建了許多功能,但我無法調用其中一個他們。即使它在測試表單中正常工作,也無法調用Web服務功能

我調用的函數是一個從數據庫中獲取字符串值的函數。呼叫工作正常的Windows(使用本地主機),但把它當到Linux服務器下單運行我得到一個異常說明如下:

功能(「getLastResetTime」),是不是這個服務

有效的方法

奇怪的是,從Linux服務器我可以通過訪問asmx文件並運行getLastResetTime函數來訪問測試表單,它返回所期望的,它似乎是PHP不能做的電話。

下面是我使用PHP來調用腳本代碼

function getLastResetTime() 
{ 
    include ("../../config.php"); 
    include ("../../includes/get-settings.php"); 
    include ("../../includes/general.php"); 
    try 
    { 
    $client = new SoapClient("http://192.168.1.74/EmailServer/EmailSoapService/EmailSoapService.asmx?WSDL", array("trace" => 1, "exception" => 0)); 
    $result = $client->__soapCall("getLastResetTime", array()); 

    echo "Last Reset: " . $result->getLastResetTimeResult; 
    } 
    catch (Exception $e) 
    { 
     echo $e->getMessage(); 
    } 
} 

下面的截圖證明了Web方法是工作單之下,它返回什麼

enter image description here

以下是網絡服務功能的代碼

[WebMethod(Description = "Gets the time the Email Server last reset")] 
public string getLastResetTime() 
{ 
    SoapHandler soapHandler = new SoapHandler(); 
    return soapHandler.getLastResetTime(); 
} 

以下是Web服務調用

public string getLastResetTime() 
{ 
    try 
    { 
     using (ConnectDb db = new ConnectDb(appSettings)) 
     { 
      string query = "SELECT * FROM settings"; 
      using (MySqlCommand cmd = new MySqlCommand(query, db.conn)) 
      { 
       using (MySqlDataReader reader = cmd.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         if (reader.GetString("setting") == "app_lastRestart") 
         { 
          return reader.GetString("value"); 
         } 
        } 
       } 
      } 
     } 
     return "N/A"; 
    } 
    catch (MySqlException ex) 
    { 
     return ex.Message; 
    } 
} 

我不明白爲什麼這是行不通的,我猜我可能失去了一些東西很簡單,但無法找到它的代碼。

感謝您提供的任何幫助。

回答

0

我剛剛發現原因,但我不明白爲什麼這不會影響方法。

基本上,我將WSDL設置爲服務器的IP地址(即使它是本地服務器),所以我把http://192.168.1.74/MySoapService.asmx,但如果我將它更改爲http://localhost/MySoapService.asmx它工作正常。

爲什麼我需要將它設置爲localhost而不是IP地址才能使這些服務正常工作。

是因爲我一個接一個地運行多個soap請求,所以瀏覽器正在停止它,當我試圖解決問題時,我注意到了,Chrome說明它是節流,如果這是問題,那麼我會認爲連接會超時,而不是說服務無效。

UPDATE 我現在已經找到了原因從IP網址更改爲localhost固定的問題,我意識到另一個功能開始有同樣的問題,後來才知道PHP的默認緩存的WSDL,如果這選項在php.ini文件中被禁用,並重新啓動Apache服務器,然後工作正常。在生產環境中可能非常有用,但在開發時會有點痛苦。

相關問題