簡體   English   中英

在 C# 示例中從客戶端向服務器 gRPC 發送文件

[英]Sending a file from client to server gRPC in C# Example

使用 C# 通過 gRPC 發送任何類型的文件

我沒有找到 gRPC 發送文件的合適示例,所以我編寫了代碼並與社區共享

客戶代碼

{
using var channel = GrpcChannel.ForAddress("http://localhost:5242");
var fileService = new IPaperService.IPaperServiceClient(channel);
byte[] file = File.ReadAllBytes("E:\\malicious_phish.csv");
PaperUploadRequest request = new PaperUploadRequest();
request.Paper = new PaperModel();
request.Paper.Day = "Day 1";
request.Paper.Session = "Session 1";
request.Paper.PaperBytes = Google.Protobuf.ByteString.CopyFrom(file);
request.Paper.FileExtention = "jpg";
request.Paper.StartTime = "08:30";
request.Paper.CombinationId = 1;
request.Paper.Decryptionkey ="Eex";
request.Paper.PaperTimeMinutes = 90;

request.Request = new GeneralRequest();
request.Request.Ip = "192.168.88.5";
request.Request.Mac = " asdf";
request.Request.HddSerial = "Asdfadf";
request.Request.Timestamp = "ASdf";

var call = fileService.UploadPaper();
await call.RequestStream.WriteAsync(request);
await call.RequestStream.CompleteAsync();
PaperUploadResponse response = await call;
Console.WriteLine(response.Response.Message);


Console.WriteLine("Press anykey to continue");
Console.ReadKey();
}

服務器代碼

public override async Task<PaperUploadResponse> UploadPaper(IAsyncStreamReader<PaperUploadRequest> requestStream, ServerCallContext context)
        {
            GeneralResponse response = new GeneralResponse();
            Console.WriteLine("Paper upload request received");
            if (await requestStream.MoveNext())
            {
                PaperUploadRequest request = new PaperUploadRequest();
                request = requestStream.Current;
                GeneralRequest generalRequest = request.Request;

                if(generalRequest != null)
                {
                    Paper paper = new Paper();
                    paper.Day =  request.Paper.Day;
                    paper.Session = request.Paper.Session;
                    paper.PaperStartTime = request.Paper.StartTime;
                    paper.PaperTimeMinutes = request.Paper.PaperTimeMinutes;
                    paper.DecryptionKey = request.Paper.Decryptionkey;
                    paper.FileExtention = request.Paper.FileExtention;
                    paper.PaperBytes = request.Paper.PaperBytes.ToByteArray();
                    try
                    {
                        myDbContext.Add(paper);
                        myDbContext.SaveChanges();
                    }
                    catch(Exception e)
                    {
                        response.Code = 500;
                        response.Status = "Failed";
                        response.Message= "Database Exception Occured";
                        response.Details = e.Message;
                        return new PaperUploadResponse { 
                            Response = response 
                        };
                    }
                }
            }

           
            response.Code = 200;
            response.Status = "Success";
            response.Message= "Paper uploaded successfully";
            Console.WriteLine("Done");
            return new PaperUploadResponse
            {
                Response = response
            };
        }

原型文件

紙質原型

syntax = "proto3";
import "Protos/general.proto";  

// The greeting service definition.
service IPaperService {
    rpc UploadPaper(stream PaperUploadRequest) returns (PaperUploadResponse);
    rpc FindAll(GeneralRequest) returns (stream PaperDownloadResponse);
    rpc Delete(DeleteRequest) returns (GeneralResponse);
}

message PaperDownloadRequest{
    GeneralRequest request = 1;
    string institute_id = 2;
}

message PaperDownloadResponse{
    repeated PaperModel paper = 1;
    GeneralResponse response = 2;
}

message PaperUploadRequest{
    PaperModel paper = 1;
    GeneralRequest request = 2;
}
message PaperUploadResponse{
    GeneralResponse response = 1;
}

message DeleteRequest{
    int32 id = 1;
    GeneralRequest request = 2;
}

message PaperModel{
    int32 id = 1;
    int32 PaperTimeMinutes = 2;
    string Decryptionkey = 3;
    string Day = 4;
    string Session = 5;
    int32 CombinationId = 6;
    string StartTime = 7;
    string FileExtention = 8;
    bytes PaperBytes = 9;
}

通用.proto

syntax = "proto3";

message GeneralResponse{
    int32 code= 1;
    string status = 2;
    string message = 3;
    string details = 4;
}

message GeneralRequest{
    string ip = 1;
    string mac = 2;
    string hddSerial = 3;
    string timestamp = 4;
    string appId =  5;
}

General 和 Paper.proto 文件都在同一個名為 Proto 的文件夾中

我沒有找到 gRPC 發送文件的合適示例,所以我編寫了代碼並與社區共享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM