1

私は完全に立ち往生していて、なぜこれが起こっているのか分かりません - 助けてください!! :)

Perl でコーディングされたメソッドを呼び出そうとする JavaScript があります。

JavaScript 関数:

function getSOAP() {
  var xmlhttp = new XMLHttpRequest();
  xmlhttp.open('POST', 'http://localhost/ispy/cwebs/hi/', true);

  // build SOAP request
  var sr =
    '<?xml version="1.0" encoding="UTF-8"?>' +
    '<Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">' +
      '<Body>' +
        '<hi>' +
          '<who>markh</who>' +
        '</hi>' +
      '</Body>' +
    '</Envelope>';

  xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) { alert('done use firebug to see responce'); }
    }
  }
  // Send the POST request
  xmlhttp.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
  xmlhttp.setRequestHeader("SOAPAction", '"urn:iSPYcwebs#hi"');
  xmlhttp.setRequestHeader("Accept", '"application/soap"');
  xmlhttp.send(sr);
}

====== Apache httd.conf 内:

# BEGIN MOD_PERL CONFIG
ScriptAlias /perl-bin/ "C:/work/dev/indigoampp/apache-2.2.11/perl-bin/"

<Location /ispy/cwebs/hi>
  SetHandler perl-script
  PerlSendHeader On
  PerlResponseHandler Apache::SOAP
  PerlSetVar dispatch_to "C:/work/dev/indigoampp/perl-5.10.0/site, iSPYcwebs::hi"
  PerlSetVar options "compress_threshold => 1000"
</Location>

<Directory "C:/work/dev/indigoampp/apache-2.2.11/htdocs">
  <IfModule mod_perl.c>
    # Files directive is only valid in Directory section
    <Files ~ "\.(pl|pm|cgi)$">
      SetHandler perl-script
      PerlHandler ModPerl::Registry
      Options ExecCGI
      Allow from all
      PerlSendHeader On
    </Files>
  </IfModule>
</Directory>

# END MOD_PERL CONFIG

======

私が呼び出そうとしているPerlコード:

#!C:/work/dev/indigoampp/perl-5.10.0/bin/perl.exe -w

package iSPYcwebs;

use strict;

use SOAP::Lite +trace => 'debug';

use vars qw(@ISA);
@ISA = qw(&hi SOAP::Server::Parameters );

sub hi {
  my $self = shift;

  my $envelope = pop;
  my $who = $envelope->dataof("//hi/who")->value;
  return SOAP::Data->name('hello' => 'iSPY says hello to '.$who);
}

1;

======

そして、これはエラー文字列です:

C:\work\dev\indigoampp\perl-5.10.0\site\lib/SOAP/Lite.pm 2806 行目でクラス (main) のメソッド (hi) へのアクセスが拒否されました。

======

私は地球上でこれを試みた最初の人ではないと確信していますが、どこにも答えを見つけることができないようです. Stackoverflow - あなたは私の最後の希望です!!

4

0 に答える 0