从 PHP 到 .NET WCF 服务发送字节数组。

6
我有一个用于接收文件的服务方法,看起来类似于这样。
public bool UploadFile(string fileName, byte[] data)
{
   //...
}

我想做的是从 PHP 向 WCF 服务中的这个方法发布数据,但不知道是否可能从 PHP 发布字节数组到由 WCF 服务托管的 .NET 方法。

所以我在考虑像这样的东西。

$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向WCF发送字节数组的问题的重复。 - gbjbaanb
1个回答

5

搞定了。 官方的php文档(http://php.net/manual/en/function.file-get-contents.php)中写道,file_get_contents函数返回整个文件的字符串。但是没有人告诉你这个字符串在传递给WCF服务时与.NET的bytearray兼容。

请看下面的示例。

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

干杯!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接