1

動画処理を行う機能を実装するサービスを書きました。

クライアント (コンソール プロジェクト) から、クライアント サービス参照を使用してサービスの関数を呼び出し、関数へのパラメーターとして FileStream を送信します (実際にクライアント側で正しい値が得られることを確認しました)。

しかし、FileStreamパラメーターがサービスに到達すると、null 例外の問題が発生し、FileStream 内に正しい値がありません。

どうすれば解決できますか?

私のコード:

サービス:

public class VideoProcess : IVideoProcess
{
    public void UploadVideo(int VideoPartNumber, FileStream videoFile, Guid ApplicatId, Guid TransactionCode)
    {
    }
}

私の顧客:

 FileStream videoFile = new FileStream(@"C:\VJob\gizmo.mp4", FileMode.Open, FileAccess.Read);     

//vpc id the client service reference
vpc.UploadVideo(2222, videoFile, new Guid("324792c9-d43c-4e38-8f94-7fc0ed2d7492"), Guid.NewGuid());
4

2 に答える 2

0

FileStream を WCF のパラメーターとして使用しないでください。FileStream はローカル ファイル システムにバインドされたストリームであるため、実際にはクライアントから適切な FileStream オブジェクトを送信しても、サーバー側で NullReferenceException が発生します。私の提案は次のとおりです。

byte[] を WCF パラメーターとして使用 > サーバー側でファイルを書き込む > ローカルでファイルを読み取る

クライアント側:

    // Use byte[] as WCF parameter
    FileInfo fileInfo = new FileInfo(path);
    long length = fileInfo.Length;
    FileStream fileStream = new FileStream(path, FileMode.Open);
    byte[] buffer = new byte[length];
    fileStream.Read(buffer, 0, (int)length);
    fileStream.Close();

    UploadVideo(buffer);

サーバ側:

    // write File in server side
    string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyyMMddHHmmss"));

    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }

    string filePath = Path.Combine(path, "FileName");

    File.WriteAllBytes(filePath , excelByte);

    // read file locally
    using (FileStream fileStream = new FileStream(filePath , FileMode.Open, FileAccess.Read))
    {
        // TO DO
    }
于 2017-01-07T09:30:40.023 に答える