使用本地 WSDL 发送到远程 URL
using a local WSDL to send to a remote URL
我正在尝试向本地打印机端点发出 SOAP 请求 - http://192.168.1.116/WebServices/PrinterService。通常要获得与端点相对应的 WSDL,您将 ?wsdl
附加到 URL 的末尾,但在这种情况下不起作用。
值得庆幸的是,可以从 https://docs.microsoft.com/en-us/windows-hardware/drivers/print/ws-print-v1-1 下载 WSDL。因此,我能够从本地文件系统读取它:
$client = new SoapClient(dirname(__FILE__) . '/WebPackage/WSDPrinterService.wsdl', ['trace' => 1]);
$client->SendDocument();
问题是这段代码总是会出现以下错误:
[29-Dec-2021 14:39:11 America/Chicago] PHP Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /home/neubert/test.php:9
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://localhos...', 'http://schemas....', 1, 0)
#1 /home/neubert/test.php(9): SoapClient->__call('SendDocument', Array)
#2 {main}
thrown in /home/neubert/test.php on line 9
__doRequest
($location
)的第二个参数是'http://localhos...'。这很可能是 localhost 被截断了。
我的问题是...如何才能使位于本地文件系统上的 WSDL 不总是 post 到本地主机?
我在 WebPackage 目录中做了 grep -r localhost .
并用 192.168.1.116 替换了所有这些实例,但我仍然收到错误。
有什么想法吗?
SoapClient 将使用 WSDL 中的地址进行调用。应该是这样的:
<soap:address location="http://localhost...etc..."/>
或
<soap12:address location="http://localhost...etc..."/>
在您的 WSDL 文件中。 XML 前缀可能不同,但您应该在那里有一个或两个地址。将此地址替换为您希望客户拨打电话的地址。
要尝试的另一件事可能是为调用设置 location:
$client = new SoapClient(dirname(__FILE__) . '/WebPackage/WSDPrinterService.wsdl', ['trace' => 1]);
$client->__setLocation('http://192.168.1.116/WebServices/PrinterService');
看看是否可行。
我正在尝试向本地打印机端点发出 SOAP 请求 - http://192.168.1.116/WebServices/PrinterService。通常要获得与端点相对应的 WSDL,您将 ?wsdl
附加到 URL 的末尾,但在这种情况下不起作用。
值得庆幸的是,可以从 https://docs.microsoft.com/en-us/windows-hardware/drivers/print/ws-print-v1-1 下载 WSDL。因此,我能够从本地文件系统读取它:
$client = new SoapClient(dirname(__FILE__) . '/WebPackage/WSDPrinterService.wsdl', ['trace' => 1]);
$client->SendDocument();
问题是这段代码总是会出现以下错误:
[29-Dec-2021 14:39:11 America/Chicago] PHP Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in /home/neubert/test.php:9
Stack trace:
#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://localhos...', 'http://schemas....', 1, 0)
#1 /home/neubert/test.php(9): SoapClient->__call('SendDocument', Array)
#2 {main}
thrown in /home/neubert/test.php on line 9
__doRequest
($location
)的第二个参数是'http://localhos...'。这很可能是 localhost 被截断了。
我的问题是...如何才能使位于本地文件系统上的 WSDL 不总是 post 到本地主机?
我在 WebPackage 目录中做了 grep -r localhost .
并用 192.168.1.116 替换了所有这些实例,但我仍然收到错误。
有什么想法吗?
SoapClient 将使用 WSDL 中的地址进行调用。应该是这样的:
<soap:address location="http://localhost...etc..."/>
或
<soap12:address location="http://localhost...etc..."/>
在您的 WSDL 文件中。 XML 前缀可能不同,但您应该在那里有一个或两个地址。将此地址替换为您希望客户拨打电话的地址。
要尝试的另一件事可能是为调用设置 location:
$client = new SoapClient(dirname(__FILE__) . '/WebPackage/WSDPrinterService.wsdl', ['trace' => 1]);
$client->__setLocation('http://192.168.1.116/WebServices/PrinterService');
看看是否可行。