Приветствую.
Появилась неразрешимая пока собственными силами проблема.
Компонента (Flash CS4 + ActionScript 3) загружается с защищенной страницы (с незащищенной тот же результат) и делает запрос к вэб сервису в котором передает SOAP конверт и бинарные данные как отдельную часть запроса.
В результате ошибка:
Error #2044: Необработанный securityError:. text=Error #2170: Нарушение изолированной среды: https://localhost/folder/component.swf?tempID=1234567890&someNumber=1234567890&URL=https://somedomain2.somedomain.net:451/testing/SomeWebService&login=user123&password=passw123 не может отправить HTTP-заголовки в https://somedomain2.somedomain.net:451/testing/SomeWebService.
Запуск компоненты производился так же с того же домена, где установлен вэб-сервис. Настраивался crossdomain.xml для разрешения доступа со всех доменов.
Прошу помощи.
Код процедуры отправки:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
public function upload(url)
{
if (bmpdata)
{
// конвертирование кадра в JPEG
encoder = new JPGEncoder(jpeg_quality);
var ba: ByteArray = encoder.encode(bmpdata);
// дата
var dt: Date = new Date();
var month: String = dt.month.toString();
if (month.length == 1 ) month = '0' + month;
var day: String = dt.date.toString();
if (day.length == 1 ) day = '0' + day;
var hr: String = dt.hours.toString();
if (hr.length == 1 ) hr = '0' + hr;
var min: String = dt.minutes.toString();
if (min.length == 1 ) min = '0' + min;
var sec: String = dt.seconds.toString();
if (sec.length == 1 ) sec = '0' + sec;
var formattedDate: String = dt.fullYear + '-' + month + '-' + day + 'T' + hr + ':' + min + ':' + sec;
// подготовка SOAP конверта
var body: ByteArray = new ByteArray();
body.writeUTFBytes(
'\r\n' +
'------=_Part_10_38335641.1233843675367\r\n' +
'Content-Type: text/xml; charset=UTF-8\r\n' +
'Content-Transfer-Encoding: 8bit\r\n' +
'Content-ID: <rootpart@soapui.org>\r\n' +
'\r\n' +
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://somedomain.net/ws-client">\n' +
' <soapenv:Header/>\n' +
' <soapenv:Body>\n' +
' <ws:sendPhotoWithAttachmentToSave>\n' +
' <ws:tempPhotoID>' + tempID + '</ws:tempID>\n' +
' <ws:eyeCoordsLeftX>' + eyeCoordsLeftX.toString() + '</ws:eyeCoordsLeftX>\n' +
' <ws:eyeCoordsLeftY>' + eyeCoordsLeftY.toString() + '</ws:eyeCoordsLeftY>\n' +
' <ws:eyeCoordsRightX>' + eyeCoordsRightX.toString() + '</ws:eyeCoordsRightX>\n' +
' <ws:eyeCoordsRightY>' + eyeCoordsRightY.toString() + '</ws:eyeCoordsRightY>\n' +
' <ws:photoTakenTime>' + formattedDate + '</ws:photoTakenTime>\n' +
' <ws:photo href="cid:customer" />\n' +
' </ws:sendPhotoWithAttachmentToSave>\n' +
' </soapenv:Body>\n' +
'</soapenv:Envelope>\r\n' +
'------=_Part_10_38335641.1233843675367\r\n' +
'Content-Type: image/jpeg\r\n' +
'Content-Transfer-Encoding: binary\r\n' +
'Content-ID: <customer>\r\n' +
'\r\n');
var body_e: ByteArray = new ByteArray();
body_e.writeUTFBytes('\r\n------=_Part_10_38335641.1233843675367--');
var req: ByteArray = new ByteArray();
req.writeBytes(body);
req.writeBytes(ba);
req.writeBytes(body_e);
// подготовка и отправка HTTP запроса
try
{
// данные авторизации
var auth: String = Base64.encode(login + ':' + password);
// запрос
var urlRequest: URLRequest = new URLRequest(url);
urlRequest.method = URLRequestMethod.POST;
// данные
urlRequest.data = req;
// необходимые заголовки
urlRequest.requestHeaders.push(new URLRequestHeader("SOAPAction", ""));
urlRequest.requestHeaders.push(new URLRequestHeader("Content-Type", 'multipart/related; type="text/xml"; start="<rootpart@soapui.org>"; boundary="----=_Part_10_38335641.1233843675367"'));
urlRequest.requestHeaders.push(new URLRequestHeader("MIME-Version", "1.0"));
urlRequest.requestHeaders.push(new URLRequestHeader("Authorization", "Basic " + auth));
// загрузчик
var urlLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener("complete", onLoaded);
urlLoader.addEventListener("ioError", ifFailed);
// инициируем передачу
urlLoader.load(urlRequest);
}
catch (e: Error)
{
setStep('upload');
ShowError('Ошибка при передаче\n' + e.message);
}
}
else ShowError('Нет изображения для загрузки');
}