0

我试图让 php 只是简单地将参数传递给 .net Web 服务,但是它从不将参数添加到调用中,但它确实调用了函数。

这是php:

$client = new SoapClient("example.com/page.asmx?WSDL");
$header = new SoapHeader('example.com/', 'UserCredentials', 
    array(
        'userName' => "cory", 
        'password' => "test", 
    )
);
$client->__setSoapHeaders(array($header));

print_r($client->add("test1234"));

这是.net

[WebMethod]
[SoapHeader( "consumer", Required = true )]
public string add( string id )
{
    if( id == null || id != "test1234" ) {
       return "ID Invalid: " + consumer.ToString() + ":::" + id;
    }
    return "good";
}

public class UserCredentials : System.Web.Services.Protocols.SoapHeader
{
    public string userName;
    public string password;

    public override string ToString()
    {
        return userName + ":" + password;
    }
}

每当我运行它时,它都会打印

stdClass Object ( [addResult] => ID Invalid: cory:test::: )

因此凭据正确传递,但值永远不会成功。有什么帮助吗?

4

2 回答 2

0

我认为您必须为参数使用关联数组:

array("id" => "test1234") 

所以你的肥皂电话:

print_r($client->add(array("id" => "test1234"));

文档PHP.NET:http://php.net/manual/fr/soapclient.soapcall.php#110390

于 2013-06-20T09:30:32.690 回答
0

.NET 根本无法正确执行 SOAP。我不再有权访问代码,但我相信您需要做一些荒谬的事情,例如将您的属性包装在另一个关联数组中,并放在名为“参数”的键下。

这是我回答的问题,使我的应用程序正常工作。

于 2012-11-14T16:26:30.533 回答