大家好我试图用PHP使用SoapClient消费.NET,但是当我的php客户端发送请求时我得到了以下问题,.NET WS没有得到正确格式的请求xml我的代码我希望有一个帮助我,谢谢ind建议
class login {
public $User;
public $Password;
}
$logr = new login;
$logr->User = 'user';
$logr->Password = 'pass';
try {
$client = new soapclient ("http://..../Service.asmx?WSDL", array('classmap' => array('LoginRequest' => 'login'),));
print_r($logr);
$client -> Login ($logr);
}
catch (Exception $e) {
echo "Error!<br />";
echo $e -> getMessage ();
}
当我在.net应用程序上测试我的.net网络服务器时,我发送了这个,并且效果很好
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2011/XMLScheme">
<soap:Body>
<Login
xmlns="http://tempuri.org">
<LoginRequest>
<User>user</User>
<Password>pass</Password>
</LoginRequest>
</Login
</soap:Body>
</soap:Envelope>
但是当我在php上测试时我得到了这个,而且这个错误服务器无法处理请求。 ---&GT;对象引用未设置为对象的实例。
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope"
xmlns:ns1="http://tempuri.org"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<SOAP-ENV:Body>
<Login
xmlns="http://tempuri.com"
xso:type="ns1:LoginRequest">
<User>user</User>
<Password>pass</Password>
</Login>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
答案 0 :(得分:1)
class LoginRequest {
public $User;
public $Password;
public function __construct($usr, $pwd) {
$this->User = $usr;
$this->Password = $pwd;
}
}
$login = new LoginRequest('user', 'password');
$client = new SoapClient('http://..../services.asmx?wsdl');
$client->login($login); // try 1
$client->login(array('LoginRequest' => $login)); //try 2
答案 1 :(得分:0)
要使用.Net Web服务,使用NetBeans IDE,添加“服务”并指向.net Web服务(确保将WSDL放在最后),然后从'service'中拖放'工具箱到php文件,它为你编写代码:)
也很棒。
[我不能说你的代码有什么问题]
答案 2 :(得分:0)
我最近在帮助客户使用我们的.Net网络服务时遇到了这个问题,所以我想我会分享以防其他人在将来遇到这个问题。
感谢adudly提供有助于阐明问题的指导。您必须为数组中的参数提供名称,并注意该名称区分大小写。
工作代码
try {
$wsdl_url = 'http://<mywebserver>/LeadWs.svc?wsdl';
$client = new SOAPClient($wsdl_url);
$params = array(
'lead' => ""
);
$return = $client->Insert2($params);
print_r($return);
} catch (Exception $e) {
echo "Exception occurred: " . $e;
}
我失败的尝试使用首都'L'代表Lead。这显然是WSDLs / XSD中唯一默认为小写的东西。如果仔细搜索WSDL / XSD,您将看到方法所需的任何参数的确切名称。一旦你做到了这些,SoapClient
将处理剩余的XML编码。
我的最终代码如下:
try {
$wsdl_url = 'http://<mywebserver>/LeadWs.svc?wsdl';
$client = new SOAPClient($wsdl_url);
$lead = new Lead(); // Could just be an array as well
// but I created a class to help the user
$lead->FirstName = "Tester";
$lead->LastName = "Test";
$lead->ZipCode = "00000";
$lead->NumberOfTVs = 2;
$params = array('lead' => $lead);
$return = $client->Insert2($params);
print_r($return);
} catch (Exception $e) {
echo "Exception occurred: " . $e;
}
希望将来帮助某人。
答案 3 :(得分:-1)
您可以使用SoapHeader和setSoapHeaders here