【问题标题】:Php Soap Server to retrieve vb WinHttp.WinHttpRequestPhp Soap 服务器检索 vb WinHttp.WinHttpRequest
【发布时间】:2012-08-05 05:13:35
【问题描述】:

晚安,读者。

我的任务是构建一个 PHP SOAP 服务器来接收 VB 客户端通过 WinHttp.WinHttpRequest 对象发送的 xml。我正在将 nuSoap 用于 php 服务器,但到目前为止它还没有工作。

vb 客户端发送的 xml 包含定义的 web 服务,需要与其他必要的变量一起使用,这就是为什么在 vb 代码中没有植入肥皂动作的原因。 '他们'想要这样:'(

soap 服务器确实向 vb 发送了这样的响应:

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
    <SOAP-ENV:Fault>
        <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
        <faultactor xsi:type="xsd:string"></faultactor>
        <faultstring xsi:type="xsd:string">Operation &apos;&apos; is not defined in the WSDL for this service</faultstring>
        <detail xsi:type="xsd:string"></detail>
    </SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

发送xml的vb客户端:

Private Sub Command2_Click()
 mydata = "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCrLf
  mydata = mydata & "<root>" & vbCrLf
mydata = mydata & "<SERVICE>SayHello</SERVICE>" & vbCrLf
mydata = mydata & "<NAME>Noobula</NAME>" & vbCrLf
mydata = mydata & "</root>" & vbCrLf
  Set w = CreateObject("WinHttp.WinHttpRequest.5.1")
      w.Open "POST", "http://127.0.0.1:80/soapvb/terimaxml.php"
      w.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
      w.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = 13056
      w.Send mydata
      respo = w.ResponseText
      Text1 = respo
End Sub

最后,服务器本身:

require_once "lib/nusoap.php";
$debug = 0;
$server = new soap_server();
$server->configureWSDL('terimaxml', 'urn:terimaxml');

function SayHello($xml){
    //messing with xml taking NAME and say Olaa
    echo "Olaaa :D";
}

$server->register('SayHello()',
                    array('xml' =>'xsd:array'),
                   'urn: terimaxml',
                   'urn: terimaxml#__construct()',
                   'rpc',
                   'encoded',
                   '-----'
                );

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)
? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);

我已经在互联网上漫游了很长一段时间来解决这个问题。所以任何帮助将不胜感激,在此先感谢。 :D

【问题讨论】:

    标签: php xml vb6 nusoap winhttprequest


    【解决方案1】:

    此服务的 WSDL 中未定义操作“”

    因为

    $HTTP_RAW_POST_DATA : '';
    

    该操作 &apos 意味着您将数据解析为带有 xml 禁止的撇号值的 xml。

    并尝试用双引号(“)更改所有撇号

    $server->register("SayHello()",
                        array("xml" =>"xsd:array"),
                       "urn: terimaxml",
                       "urn: terimaxml#__construct()",
                       "rpc",
                       "encoded",
                       "-----"
                    );
    

    如果我错了,请纠正我。

    ^^

    【讨论】:

    • 嗨,我也遇到了这个错误,但是还是不行:S
    【解决方案2】:

    我不确定这里的代码是否为了可读性而刻意清理,但我认为我看到了三个问题。

    首先,-&gt;register 中的函数名不应包含()

    $server->register("SayHello",
      array("xml" =>"xsd:array"),
      "urn: terimaxml",
      "urn: terimaxml#__construct()",
      "rpc",
      "encoded",
      "-----"
    );
    

    其次,我认为$HTTP_RAW_POST_DATA 命名错误,因此您向函数发送了一个空变量。

    $HTTP_RAW_POST_DATA = isset($GLOBALS["HTTP_RAW_POST_DATA"]) ? 
    $GLOBALS["HTTP_RAW_POST_DATA"] : "";
    

    第三个可选参数,HTTP_RAW_POST_DATA 已弃用,取而代之的是超级全局数组 $_POST

    $server->service( http_build_query($_POST) );
    

    我不确定,我两个月前才开始使用 nusoap,但这些是我的代码和你的代码之间的区别。一次尝试一个,看看它们是否有帮助。

    【讨论】:

      猜你喜欢
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多