网络服务.asmx不接收POST/SOAP请求的参数


Webservice.asmx not receiving parameters with POST/SOAP requests

我试图从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个参数是可选的,但我使用它们)

希望有帮助