我正在尝试从PHP环境向C#(实际上是Mono)Web服务发送数据。奇怪的是,当我使用浏览器URL(即使用GET方法)调用web服务时,它正常工作。
但是,从我的PHP脚本调用它会显示Mono方没有收到任何参数。
这是我的PHP电话:
$domoWSHeader->setAuthenticatedToken($resultAuthentification->AuthentificationResult);
$inputHeaders = new SoapHeader("http://tempuri.org/domo", "DomoWSHeader", $domoWSHeader, false);
$result = $soapClient->__soapCall("MyWebServiceMethod", array("idLight"=>$uuid), NULL, $inputHeaders);
Webservices.asmx看起来像:
namespace domo
{
public class DomoWSHeader : System.Web.Services.Protocols.SoapHeader
{
public string username;
public string password;
public string authenticatedToken;
}
[WebMethod]
public bool MyWebServiceMethod(int idLight)
{
bool success = false;
//Snip
return success;
}
}
我尝试了什么?
尝试在方法之前声明[System.Web.Services.Protocols.SoapHeader("DomoWSHeader")]
并未改变行为。
我还尝试编辑web.config
文件以在其中添加协议。我对C#世界全新,我不知道在哪里可以找到这个问题的答案。我希望你们中的一个能帮助我理解这里发生的事情。
答案 0 :(得分:1)
从PHP.NET找到问题的根源:http://php.net/manual/fr/soapclient.soapcall.php#110390
在PHP代码中,“_ _ soapCall()”方法中的参数是:
$parameters = array("idLight" => $uuid);
但是当你使用它们直接调用webservice方法时它是正确的:
$soapClient->NameOfTheMethod($parameters);
在我的情况下,我需要使用“__soapCall()”调用webservice方法,因为我使用头进行身份验证,PHP.NET文档说我们必须将参数数组封装到另一个数组中,如下所示:
$soapClient->__soapCall("NameOfTheMethod", array($parameters), NULL, $inputHeaders);
(注意“__soapCall()”方法中的第3和第4个参数是选项,但我使用它们)
希望这有帮助:)