У меня есть служба WCF
с методом получения файлов, выглядя что-то вроде этого
public bool UploadFile(string fileName, byte[] data) { //... }
То, что я хотел бы сделать, – опубликовать данные в этом методе в службе WCF с PHP, но не подозревает, что даже можно отправлять байтовые массивы из PHP в метод .NET, размещенный службой WCF.
Поэтому я думал о чем-то подобном
$file = file_get_contents($_FILES['Filedata']['tmp_name']); // get the file content $client = new SoapClient('http://localhost:8000/service?wsdl'); $params = array( 'fileName' => 'whatever', 'data' => $file ); $client->UploadFile($params);
Будет ли это возможно или есть какие-то общие рекомендации, о которых я должен знать?
Догадаться. Официальная документация php сообщает, что file_get_contents возвращает весь файл в виде строки (http://php.net/manual/en/function.file-get-contents.php). Что никто не говорит, что эта строка совместима с .NET bytearray, когда отправляется в службу WCF.
См. Пример ниже.
$filename = $_FILES["file"]["name"]; $byteArr = file_get_contents($_FILES['file']['tmp_name']); try { $wsdloptions = array( 'soap_version' => constant('WSDL_SOAP_VERSION'), 'exceptions' => constant('WSDL_EXCEPTIONS'), 'trace' => constant('WSDL_TRACE') ); $client = new SoapClient(constant('DEFAULT_WSDL'), $wsdloptions); $args = array( 'file' => $filename, 'data' => $byteArr ); $uploadFile = $client->UploadFile($args)->UploadFileResult; if($uploadFile == 1) { echo "<h3>Success!</h3>"; echo "<p>SharePoint received your file!</p>"; } else { echo "<h3>Darn!</h3>"; echo "<p>SharePoint could not receive your file.</p>"; } } catch (Exception $exc) { echo "<h3>Oh darn, something failed!</h3>"; echo "<p>$exc->getTraceAsString()</p>"; }
Ура!