Webservice.asmx没有接收POST / SOAP请求的参数

时间:2013-06-18 14:47:23

标签: c# php web-services soap mono

我正在尝试从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#世界全新,我不知道在哪里可以找到这个问题的答案。我希望你们中的一个能帮助我理解这里发生的事情。

1 个答案:

答案 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个参数是选项,但我使用它们)

希望这有帮助:)