Отправка массива байтов из PHP в WCF

Мне нужно отправить массив байтов (закодированное фото) из моего PHP-клиента на хост WCF. когда я делаю var_dump () на моем массиве в PHP, я получаю массив [2839], который в порядке, но на стороне сервера, когда я отлаживаю, я вижу, что полученный массив является только байтом [5] … Любая идея, как я могу исправить Это?

Я использовал такой код

$file = file_get_contents($_FILES['Filedata']['tmp_name']); $byteArr = str_split($file); foreach ($byteArr as $key=>$val) { $byteArr[$key] = ord($val); } $client = new SoapClient('http://localhost:8000/MgrService?wsdl', array( 'location' => 'http://localhost:8000/MgrService/SOAP11', 'trace' => true, 'soap_version' => SOAP_1_1 )); $par1->profileId = 13; $par1->photo = $byteArr; $client->TestByte($par1); 

И, как я писал ранее на хосте wcf, я получаю только байт [5]: / возможно, ему нужно некоторое декодирование для правого сериала сериала? Должен ли я использовать декодирование Base64 или что-то еще?

General Я просто хочу загрузить опубликованный файл в функцию c # с байтом [] в качестве параметра: / Справка

О, и часть wsdl этой функции выглядит так:

 <xs:element name="TestByte"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="photo" nillable="true" type="xs:base64Binary"/> </xs:sequence> </xs:complexType> </xs:element> 

Вы должны использовать строки в PHP для эмуляции байт-массивов. Вы даже можете использовать синтаксис $str[index] со строками. В противном случае у вас ОГРОМНЫЕ служебные (4x или 8x в зависимости от размера int полезная нагрузка PLUS накладные расходы хеш-таблицы).

Я не очень хорошо знаком с преобразованиями типов, которые использует расширение SOAP, но использование строки, вероятно, будет работать.

РЕДАКТИРОВАТЬ: Просто проверьте источники:

 if (Z_TYPE_P(data) == IS_STRING) { str = php_base64_encode((unsigned char*)Z_STRVAL_P(data), Z_STRLEN_P(data), &str_len); text = xmlNewTextLen(str, str_len); xmlAddChild(ret, text); efree(str); } 

Таким образом, он уже кодирует базу 64.

EDIT2: [СПЕКУЛЯЦИЯ]

Ваш 5-байтовый результат получается из-за преобразования в строку, которая следует за приведенным выше кодом:

 if (Z_TYPE_P(data) == IS_STRING) { ... } else { zval tmp = *data; zval_copy_ctor(&tmp); convert_to_string(&tmp); str = php_base64_encode((unsigned char*)Z_STRVAL(tmp), Z_STRLEN(tmp), &str_len); text = xmlNewTextLen(str, str_len); xmlAddChild(ret, text); efree(str); zval_dtor(&tmp); } 

Результатом преобразования является «Массив», длина которого составляет 5 байтов.