2012-10-24 94 views
3

我試圖在VS 2012與.net 4.5中使用Telerik OpenAccess的WCF Plain服務。WCF未處理的FaultException未被用戶代碼處理

我試過telerik開發者手冊並創建了服務和客戶端。

在IEntitiesModel我把

[OperationContract] 
[FaultContract(typeof(string))] 
PersistentDto ReadPersistentDto(string dtoKey); 

在EntitiesModel.SVC用於我用一個簡單的構建體作爲第一次嘗試的方法中,服務接口:

public PersistentDto ReadPersistentDto(string dtoKey) 
{ 
    throw new FaultException("test"); 
} 

在消費者的用戶代碼我把一個趕上例外。

現在的問題是:

每次調用服務時,Visual Studio將停止在「拋出新的FaultException」與錯誤信息,即FaultException異常並非由用戶代碼處理。如果我繼續使用F5,則異常也會被用戶的用戶代碼捕獲。

爲什麼停止服務?

在我的理解一個FaultException是應該傳遞給服務的消費者的東西。

我應該怎麼做才能正確拋出FaultException?

+0

你有沒有調試過程中啓用了第一次機會異常?如果是,則每個拋出的異常都會導致調試器停止在引發異常的位置。 –

回答

9

轉到Debug -> Exceptions,並取消選中行CLR exceptionThrown列下的複選框。

如果選中該複選框,它將導致調試器停止在您拋出異常的每個位置。

+1

謝謝你這個答案:)現在,我的Ierrorhandler按順序和一切。不知道它的工作 – Dendei

0

服務器不知道客戶端將處理異常(他應該怎麼做?)。這就是調試器告訴你它未被處理的原因。

您還拋出故障是這樣的:

[FaultContract(typeof(string))] 
0

它與debbugging相關:

public PersistentDto ReadPersistentDto(string dtoKey) 
{ 
    throw new FaultException<string>("test"); 
} 

這是你的聲明相匹配。但是,它不會在執行時停止服務(除非您沒有正確管理例外)。

正如RV1987所說,如果VS啓用了CLR異常,它會讓你知道任何時候拋出異常。

0

這與設置有關。您可以通過工具 - >選項 現在切換到調試菜單,並取消
做需要設置「啓用異常助手」和
「啓用僅我的代碼」 enter image description here

相關問題