PDA

Просмотр полной версии : WebService и basic authentication


Mamoulian
19.09.2008, 14:07
Здравствуйте.
Во flex и flesh начинающий, помогите разобраться.
Хочу получать данные от самописного вебсервиса, вебсервис элементарный - две функции, одна возвращает строку, другая число. Написан на java с axis2.
Работает, проверено. Работает через .NET и через Flex.
Но сервис необходимо закрыть от постаронних. Включаю на axis2 basic authentication - сервис работает и доступен из приложения на .NET, а вот из flex'а получить доступ не выходит - выводится ошибка.
Может быть поделитесь примером, как это делается правильно?
У меня так:

package
{
import mx.controls.Alert;
import mx.rpc.events.*;
import mx.rpc.soap.LoadEvent;
import mx.rpc.soap.mxml.WebService;
import flash.system.*;

public final class MainApp
{
private var ws:WebService;
private var url:String = "http://pma:8080/axis2/services/HelloService?wsdl";
private var user:String = "webservice";
private var password:String = "webservice";

public function MainApp()
{
trace(PlayerVersion());
Service();
}

private function PlayerVersion(): String
{
var v:String = "Player version: ";
v = v + Capabilities.version;
if (Capabilities.isDebugger)
v = v + " debugger";

return v;
}

private function Service(): void
{
try {
ws = new WebService();
ws.useProxy = true;
ws.wsdl = url;
ws.setCredentials(user, password); // это надо?
ws.setRemoteCredentials(user, password); // А это, какая строка нужна?
ws.addEventListener(FaultEvent.FAULT, errorHandler);
ws.addEventListener(LoadEvent.LOAD, loadHandler);
ws.loadWSDL();
}
catch(e:Object) {
trace("Web service initialization error");
if(e.message)
trace(e.message);
else
trace("Unknown error");
}

}

private function loadHandler(event:LoadEvent):void
{
ws.getHelloString.addEventListener(ResultEvent.RESULT, getHelloStringResult);
ws.getHelloString.send();
ws.getNumber.addEventListener(ResultEvent.RESULT, getNumberResult);
ws.getNumber.send();
}

private function errorHandler(event:FaultEvent):void
{
trace("Web Service error:" );
if (event.message)
{
trace(event.message.toString());
}
else
{
trace("Unknown error!");
}
Alert.show("Ошибка запроса к вебсервису", "Ошибка соединения");
}

private function getHelloStringResult(e:ResultEvent): void
{
Alert.show(e.result.toString());
}

private function getNumberResult(e:ResultEvent): void
{
Alert.show(e.result.toString());
}
}
}


Ошибку получаю такую:

Web Service error:
(mx.messaging.messages::HTTPRequestMessage)#0
body = (Object)#1
clientId = (null)
contentType = "application/x-www-form-urlencoded"
destination = ""
headers = (Object)#2
DSRemoteCredentials = "d2Vic2VydmljZTp3ZWJzZXJ2aWNl"
DSRemoteCredentialsCharset = (null)
httpHeaders = (Object)#3
messageId = "11A297B4-19FE-F942-B249-79AB369CEAAF"
method = "GET"
recordHeaders = false
timestamp = 0
timeToLive = 0
url = "http://pma:8080/axis2/services/HelloService?wsdl"