2011-11-17 136 views
1

我有一個wcf服務,它具有單向操作並將結果發送回調。這裏是我的服務定義如何通過wcf回調向客戶端拋出異常

[ServiceContract(CallbackContract = typeof(IIrmCallback), SessionMode = SessionMode.Required)] 
    public interface IFileService 
    { 
     [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)] 
     [ServiceKnownType(typeof(StatementFile))] 
     [ServiceKnownType(typeof(InvoiceFile))] 
     void UploadFile(IFile file); 
    } 

    public interface IFileCallback 
    { 
     [OperationContract] 
     void FileProcessed(string result); 
    } 

public MyService : IFileService 
{ 
    IFileCallBack callbackchannel; 
    object result; 
    public void UploadFile(IFile file) 
{ 
    callbackChannel = OperationContext.Current.GetCallbackChannel<IIrmCallback>(); 
    Task.Factory.StartNew(() => ProcessFile(file)); 
} 
private ProcessFile(IFile file) 
{ 
// file gets processed 
callbackChannel.FileProcessed(result) 
} 
} 

所以,現在如果在文件處理過程中的一些錯誤是有什麼方法,我可以拋出一個異常給回調來電?

回答

3

您可以使用FaultException

當操作拋出一個異常,一個FaultException異常將被返回給客戶端。

+0

UploadFile是單向操作,我修復了代碼示例,因此引發的故障異常不會到達客戶端。 – Satish

+0

@Satish:s Michael說,你必須在你的void UploadFile(IFile文件)上添加一個[FaultContract(typeof(YourCustomFault))]; –

+1

您無法將FaultContract屬性和OneWay = true屬性一起設置爲 – Satish

1

您需要在服務接口中實現一個FaultContract,指定該給定方法中可能出現的故障類型,然後在該方法內拋出一個繼承自FaultException的新故障。

在客戶端上,確保分別捕獲並處理FaultException和Exception對象,因爲Exceptions會導致WCF通道出現故障並且無法重用,而FaultException將允許您繼續使用現有通道。

相關問題