Php 无法调用web服务函数,即使它在测试表单中工作正常

Php 无法调用web服务函数,即使它在测试表单中工作正常,php,soap,Php,Soap,我正在制作一个php/c#console app/c#soap服务,我在web服务中创建了许多函数,但我无法调用其中一个 我调用的函数是一个从数据库获取字符串值的函数。该调用在Windows(使用localhost)上运行良好,但当将其放到在mono下运行的Linux服务器上时,我会收到一个异常,说明如下: 函数(“getLastResetTime”)不是此服务的有效方法 但奇怪的是,在Linux服务器上,我可以访问测试表单,方法是转到asmx文件并运行getLastResetTime函数,它返

我正在制作一个php/c#console app/c#soap服务,我在web服务中创建了许多函数,但我无法调用其中一个

我调用的函数是一个从数据库获取字符串值的函数。该调用在Windows(使用localhost)上运行良好,但当将其放到在mono下运行的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方法在Mono下工作以及它返回的内容

下面是web服务功能的代码

[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;
    }
}
我不明白为什么这不起作用,我猜我可能错过了一些非常简单的东西,但找不到


谢谢你能提供的帮助

我刚刚找到了原因,但我不明白为什么这不影响方法

基本上,我将WSDL设置为服务器的IP地址(即使它是服务器的本地地址),因此我将
http://192.168.1.74/MySoapService.asmx
但如果我将其更改为
http://localhost/MySoapService.asmx
它工作正常

为什么我需要使用localhost而不是IP地址才能让这些服务正常工作

是因为我一个接一个地运行多个soap请求,所以浏览器停止了它,我在试图解决问题时注意到,Chrome说它正在节流,如果这是问题,那么我会认为连接会超时,而不是说服务无效

更新 现在我已经了解了为什么将url从IP更改为localhost解决了这个问题,我意识到另一个函数也开始出现同样的问题,后来我意识到php默认缓存wsdl,如果在php.ini文件中禁用此选项并重新启动apache服务器,它就会正常工作。在生产环境中可能非常有用,但在开发时有点麻烦