【发布时间】:2014-07-18 10:08:52
【问题描述】:
我有 C#/ASP.NET Web 服务,它在远程服务器上运行并使用 WSDL。直到最近它被移动到另一台服务器时,它才能正常工作。然而,这意味着我必须更改硬编码的数据库连接字符串,因此需要在我的开发机器上重新构建代码并上传到服务器。
服务是从运行在另一个使用 SOAP 的 Web 服务器上的 PHP 脚本调用的。
出于某种原因,据我所知,它正在尝试运行旧代码,即使我已经对其进行了修改。
例如如果我将我的 Web 服务功能更改为仅返回,例如“Hello, World”,它似乎仍在尝试连接到数据库等(但由于该数据库不再存在而失败,我相信它仍在尝试使用旧的连接字符串)
如果我删除该函数,它会告诉我该函数不存在。 (所以它在寻找正确的地方)
如果我添加一个新函数并尝试从 php 脚本调用它,我会收到错误消息
The server did not recognize the value of HTTP Header SOAPAction
如果我尝试使用http://localhost/Myservice/Myservice.asmx 在实际服务器上对其进行测试,一切正常!
这是我用来调用的代码:
ini_set("soap.wsdl_cache_enabled", 0);
$client = new SoapClient("http://1.2.3.4:8083/MyService/MyService.asmx?WSDL&revision=1", array('cache_wsdl' => WSDL_CACHE_NONE));
$input = new stdClass;
$input->inputvals = '15707F';
echo "Functions: |";
print_r($client->__getFunctions()); // Lists all functions including new ones
echo "|\n\n";
$Response = $client->checkPrice($input);
print_r($Response);
为了部署代码,这就是我正在做的事情——在本地开发机器上,我将解决方案发布到文件系统(由于某种原因,我无法让 IIS 在这台机器上运行)。然后在服务器机器上停止 IIS,在 IIS 中“删除应用程序”,将我的文件复制进去,“转换为应用程序”,然后重新启动 IIS。
【问题讨论】:
-
您认为客户端是在与旧服务器通信还是在新服务器上与旧版本通信?对我来说听起来像是旧服务器。
-
由于某种原因,您的 PHP 客户端正在与旧服务器通信。尝试关闭旧服务器(或从中删除 Web 服务),看看客户端是否出现错误。
-
@Rhumborl 我不这么认为 - 正如我所说,如果我在新服务器上关闭 IIS,客户端根本无法访问该服务,如果我打开 Web 服务,但是从中删除一个方法,它会识别出该方法现在已经消失了。 (即找不到的错误)
-
好的,这里有个线索:当我滚动到 WSDL xml 文件的底部时,我看到了
<wsdl:service name="MyService"> <wsdl:port name="MyServiceSoap" binding="tns:MyServiceSoap"> <soap:address location="http://1.2.3.4/MyService/MyService.asmx"/> </wsdl:port>注意:1.2.3.4 不是 1.2.3.4:8083 - 不知道为什么会这样,但是 1.2.3.4 (没有:8083)是旧服务的地址,我今天才发现它仍在运行 - 它只是关闭了数据库!
标签: asp.net web-services iis soap wsdl