2011-08-09 24 views
5

tôi nhận được một dịch vụ WCF với một phương pháp để nhận file, tìm kiếm một cái gì đó như thế nàybài byte mảng từ PHP để NET WCF Service

public bool UploadFile(string fileName, byte[] data) 
{ 
    //... 
} 

Những gì tôi muốn làm là để gửi dữ liệu đến này phương pháp trong dịch vụ WCF từ PHP, nhưng không biết nếu nó thậm chí có thể gửi mảng byte từ PHP đến một phương pháp .NET được lưu trữ bởi một dịch vụ WCF.

Vì vậy, tôi đã nghĩ đến việc gì đó như thế này

$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); 

này có thể hoặc là có bất kỳ khuyến cáo chung lên đó, tôi nên biết không?

+0

bản sao có thể có của [Gửi mảng byte từ vấn đề PHP đến WCF] (http://stackoverflow.com/questions/2986151/sending-a-byte-array-from-php-to-wcf-problem) – gbjbaanb

Trả lời

5

Đã tìm ra. Tài liệu php chính thức cho biết rằng file_get_contents trả về toàn bộ tệp dưới dạng một chuỗi (http://php.net/manual/en/function.file-get-contents.php). Những gì noone nói là chuỗi này tương thích với .NET bytearray khi được đăng lên một dịch vụ WCF.

Xem ví dụ bên dưới.

$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>"; 
} 

Chúc mừng!