网络服务.asmx不接收POST/SOAP请求的参数
本文关键字:SOAP 请求 参数 POST asmx 网络服务 | 更新日期: 2023-09-27 18:18:58
我试图从PHP环境发送数据到c#(实际上是Mono) web服务。奇怪的是,当我用浏览器URL(即使用GET方法)调用它时,webservice工作正常。
然而,从我的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#世界完全陌生,我不确定在哪里可以找到这个问题的答案。我希望你们中有人能帮助我理解这里发生了什么
从PHP中找到问题的根源。. NET: http://php.net/manual/fr/soapclient.soapcall.php#110390
在PHP代码中,"__soapCall()"方法中的参数是:
$parameters = array("idLight" => $uuid);
但是当你使用它们直接调用webservice方法时是正确的:
$soapClient->NameOfTheMethod($parameters);
在我的情况下,我需要调用webservice方法与"__soapCall()",因为我使用头认证,和PHP。. NET文档指出,我们必须将参数数组封装为另一个数组,如下所示:
$soapClient->__soapCall("NameOfTheMethod", array($parameters), NULL, $inputHeaders);
(注意"__soapCall()"方法中的第3和第4个参数是可选的,但我使用它们)
希望有帮助