我的情況是這樣的。在每次調用我的Web服務時,我都有一個out參數,它是一個錯誤對象。如果沒有錯誤,則該對象通過空白表示。如果出現錯誤,那麼會填充不同的屬性,例如「HasError」字段,「ErrorMessage」,「PrettyMessage」等。我現在想要做的是創建不同類型的Error對象,它們都會實現一個錯誤我已經定義了接口。然後我希望能夠將out參數設置爲「out IMyError error」,然後能夠將該錯誤對象設置爲該接口的一個實現,具體取決於我在方法中遇到的錯誤類型。我得到的問題是序列化似乎不喜歡這個。該方法運行良好,但我沒有得到任何數據在客戶端。這裏有一些代碼希望澄清。將界面用作WCF Web服務中的輸出參數
我的界面
public interface IMyError
{
bool HasError { get; set; }
string ErrorType { get; set; }
string PrettyErrMsg { get; set; }
}
一個例子類實現
[Serializable]
[DataContract]
public class AspError : IMyError
{
public AspError(Exception exception)
{
this.HasError = true;
this.PrettyErrMsg = "An ASP Exception was thrown";
this.ExceptionMsg = exception.Message;
this.StackTrace = exception.StackTrace;
}
[DataMember(Name = "has_error", IsRequired = true)]
public bool HasError { get; set; }
[DataMember(Name = "error_type", IsRequired = true)]
public string ErrorType
{
get
{
return "ASP";
}
set
{
}
}
[DataMember(Name = "pretty_error", IsRequired = true)]
public string PrettyErrMsg { get; set; }
[DataMember(Name = "exception", IsRequired = true)]
public string ExceptionMsg { get; set; }
[DataMember(Name = "stack_trace", IsRequired = true)]
public string StackTrace { get; set; }
}
而在我的WCF服務的方法
public bool MyMethod(out IMyError error)
{
error = new MyError() { HasError = false };
try
{
// do some code
}
catch (Exception exception)
{
error = new AspError(exception);
return false;
}
}
我想是該方法,當一個例外是被捕獲,返回一個AspError格式化爲json的方式,它在過去的工作方式之前,我嘗試了doin將其作爲接口。或者,如果發生不同類型的IMyError,則返回THAT類型,格式爲json。我認爲它可以工作,因爲它們都是IMyError類。
謝謝。然而,一個澄清。我其實將屬性添加到wcf服務的接口類,而不是像你展示的方法。 – sanpaco 2012-07-27 18:31:07
@sanpaco您是否認爲您已將'KnownTypeAttribute'添加到'AspError'或您的'IMyError'接口,因爲我認爲不可能在接口上添加'KnownType屬性',這隻能在'struct,枚舉或類' – 2016-06-07 15:11:41