The most important thing here is that you're not checking $@. Using eval and then throwing away $@ means you've lost the most important clue as to what's going on!
It looks like the service is not using basic authentication, but Soap Header authentication.
I think the code is going to look something like this:
use SOAP::Lite;
use strict;
my $service = SOAP::Lite
-> service('http://server/GetData.asmx?WSDL');
my $AuthHeader = SOAP::Header->new(
name =>'AuthenticationHeader',
attr => { xmlns => "http://www.server.com/" },
value => {username => 'user', password => 'pass' },
);
my $result = $service->GetIt($AuthHeader);
Without seeing the WSDL, I can't be sure--not that I'm a SOAP expert.