簡體   English   中英

WCF調用函數而不等待它完成它的工作?

[英]WCF call a function without waiting for it to finish its job?

在每次從WCF服務調用函數時,在客戶端,它等待直到WCF服務上的函數完成,就像調用本地函數一樣。 所以我為每個在新線程中啟動預期函數的函數添加了一個額外的函數,所以我的幾乎所有函數都是這樣的:

EX:
我從CLIENT端調用一個函數client.ReceiveFile()

private void SendFile(Socket socket, Job job, DoWorkEventArgs e)
    {
        UpdateInfo(job.Name, job.Icon, job.Size);
        client.ReceiveFile((_File)job.Argument, bufferSize);
        SizeAll = job.Size;
        UpdateCurrFile(((_File)job.Argument).Path, "1");
        SendX(socket, ((_File)job.Argument).Path, e);
    }

在服務器中我必須這樣做:

 public void ReceiveFile(_File file, int bufferSize)
    {
        System.Threading.Thread th = new System.Threading.Thread(unused => ReceiveFileTh(client, file.Name, file.Size, bufferSize));
        th.Start();
    }
    private void ReceiveFileTh(Socket client, string destPath, long size, int bufferSize)
    {
        try
        {
            ReceiveX(client, destPath, size, bufferSize);
        }
        finally
        {
            CloseClient();
        }
    }

關鍵是,當我從客戶端sendFile時,它告訴服務開始接收,但如果我沒有啟動新線程,客戶端將等待服務接收文件,並且不會發送文件數據。

因此,WCF支持一種不會使客戶端等待服務功能完成的方式! 或者我將不得不使用上述方法?

您正在尋找的是[OperationContract(IsOneWay = true)]有關詳細信息,請參閱http://msdn.microsoft.com/en-us/magazine/cc163537.aspx

.NET客戶端代碼生成工具內置了對此的支持 - 您不必手動生成每個方法的異步版本。

如果您在Visual Studio中使用“ 添加服務引用” ,請檢查頂部附近的對話框:有一個“ 生成異步操作”復選框。 如果您使用的是svcutil.exe ,則使用參數/ async生成異步客戶端方法。

暫無
暫無

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

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