2017-01-26 7 views
1

私はWCFサービスを作成し、WebFaultException<MyResultClass>を投げてエラーを処理しています。 (MyResultClass)は私のプロジェクトのクラスです:wcfサービスにクラスのシリアル化を強制する方法

[DataContract] 
    public class MyResultClass 
    { 
     [DataMember(IsRequired = false)] 
     public int Code; 
     [DataMember(IsRequired = false)] 
     public string Description; 
     public MyResultClass() 
     { 

     } 

    } 

問題は、WCFサービスがこのクラスをシリアル化していないことです。

+0

あなたは[DataMemberを]ジュースを試しましたか?プロパティで試してください https://msdn.microsoft.com/en-us/library/ms733127.aspx – PiotrKowalski

+0

それは動作していません – Ala

答えて

2

まず(他の人が言及したように)プロパティを使用する必要があります。

[DataContract] 
public class MyResultClass 
{ 
    [DataMember] 
    public int Code { set; get; } 
    [DataMember] 
    public string Description { set; get; } 
} 

さらに、あなたはあなたのインターフェイスでFaultContractを指定する必要があります。さもなければ、クライアントは何を期待するかを知ることができません。 WebFaultExceptionFaultExceptionから継承しているので、指定する必要はありません。

[ServiceContract] 
public interface IService: 
{ 
    [OperationContract] 
    [FaultContract(typeof(MyResultClass))] 
    void DoStuff(); 
} 

そして、あなたのimplementaion:

public class Service : IService 
{ 
    public void DoStuff() 
    { 
     var detail = new MyResultClass 
     { 
      Code = 400, 
      Description = "foo" 
     }; 
     throw new WebFaultException<MyResultClass>(detail, HttpStatusCode.BadRequest); 
    } 
} 

そして、あなたのクライアント:

try 
{ 
    // Call your WCF service here... 
} 
catch (FaultException<MyResultClass> e) 
{ 
    MyResultClass detail = e.Detail; 
    // Do stuff with detail 
} 
catch (Exception e) 
{ 
    // Some other error 
} 
+0

ありがとうございます。あなたは命の恩人です:) – Ala

0

これにあなたのクラスを変更してみてください:すべての

[DataContract] 
public class MyResultClass 
{ 
    [DataMember] 
    public int Code { set; get; } 
    [DataMember] 
    public string Description { set; get; } 

} 
+0

私はそれを試みたが、それは動作していません – Ala

+0

私は別の何かが間違っていると思います! – David

関連する問題