0

我正在尝试从 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# 世界完全陌生,我不确定在哪里可以找到这个问题的答案。我希望你们中的一个可以帮助我了解这里发生了什么。

4

1 回答 1

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()”方法中的第三和第四个参数是可选的,但我使用它们)

希望这有帮助:)

于 2013-06-20T09:13:21.677 回答