1

尝试拨打肥皂电话时出现此错误。

The SOAP action specified on the message, '', does not match the HTTP SOAP Action. 

当我打电话时 $service->SearchTouristItems($sti);(这个函数在下面)我得到了上面的错误,我不知道为什么。

以下是我正在使用的代码。

// 我使用http://www.urdalen.no/wsdl2php/创建了扩展 SoapClient 的 TCS2Service

$service = new TCS2Service() ;

$sd = new ServiceDescriptor;
$sd->UniqueIdentifier = 'xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxx';

$stic = new SearchTouristItemCriteria;
$stic->SearchString = array ('dublin') ;    

$sti = new SearchTouristItems;

$sti->searchTouristItemCriteria = $sd;
$sti->serviceDescriptor = $stic;

$result = $service->SearchTouristItems($sti);

    echo "<pre>";
    print_r($result);
    echo "</pre>";



SearchTouristItems looks like this  
  /**
   *  
   *
   * @param SearchTouristItems $parameters
   * @return SearchTouristItemsResponse
   */
  public function SearchTouristItems(SearchTouristItems $parameters) {
    return $this->__soapCall('SearchTouristItems', array($parameters),       array(
            'uri' => 'http://tempuri.org/',
            'soapaction' => ''
           )
      );
  }

这是客户端的初始化

public function TCS2Service($wsdl = "http://www.example.com/services/TCS2Service.svc", $options = array( 'soap_version'  => SOAP_1_2, 
          'exceptions'    => true, 
          'trace'         => 1, 
          'cache_wsdl'    => WSDL_CACHE_NONE,)) {
  foreach(self::$classmap as $key => $value) {
    if(!isset($options['classmap'][$key])) {
      $options['classmap'][$key] = $value;
    }
  }
  parent::__construct($wsdl, $options);
}
4

3 回答 3

0

虽然不确定,但'soapaction' => ''您的代码中的值是用提供的参数替换的。我没有使用 PHP 调用 Web 服务的经验,所以只是想了一下。

于 2013-08-31T20:38:28.137 回答
0

我认为您的 ws-addressing 未打开。请打开 ws-addressing 并再次检查。

于 2013-09-04T12:46:53.857 回答
0

我会做什么:

  • 检查 SOAP 操作是否在 WSDL 中定义明确:查找address location="

  • 尝试另一个 WSDL 到 php 转换器

  • 发送 WSDL url,以便我可以在我身边尝试

于 2013-09-05T08:05:39.010 回答