2016-08-19 5 views
0

私はクラスオブジェクトを入力パラメータとして受け取り、それをWCFサービスオペレーション契約に投稿するWeb APIを持っています。 WCFサービスは、あらゆるタイプの要求を受け取り、どのタイプの要求が来て、どのコードを実行する必要があるかの内部マッピングを行うように設計されています。そのためのロジックを以下に示します。Web APIに任意のタイプのリクエストオブジェクトをパラメータとして投稿する

public class PdfPrinterService : IPdfPrinter 
    { 
    public PdfPrinterResponse Print(PdfPrinterRequestBase request) 
    { 
     if (request is Request1) 
     { 
      //Process user report request and send back the response 
     } 
     if (request is Request2) 
     { 
      //Process request 2 and send back the response 
     } 
     return PdfPrinterFacade.PrintPdf(); 
    } 
} 

    //IPdfPrinter 
    public interface IPdfPrinter 
    { 
    [OperationContract] 
    PdfPrinterResponse Print(PdfPrinterRequestBase request); 
    } 

    //PdfPrinterRequestBase 
    [DataContract] 
    [KnownType(typeof(Request1))] 
    [KnownType(typeof(Request2))] 
    public class PdfPrinterRequestBase : IRequest 
    { 
    [DataMember] 
    public RequestHeader ReqHdr { get; set; } 
    } 

//Web API Request1 
    public PdfPrinterResponse Print(Request1 _request1) 
    { 
     PdfPrinterService.PdfPrinterClient 
     _Client = new PdfPrinterService.PdfPrinterClient(); 
     return _Client.Print(_request1); 
    } 

    //Web API Request2 
    public PdfPrinterResponse Print(Request2 _request2) 
    { 
     PdfPrinterService.PdfPrinterClient _Client = 
     new PdfPrinterService.PdfPrinterClient(); 
     return _Client.Print(_request2); 
    } 

上記のアプローチは、私にとっては大丈夫です、しかし、オブジェクトの任意の型を取り、WCFサービスと私がやったマッピング(もし要求1に渡しのみ1 API、プロセスを持っているし、返送することを計画リクエスト2のプロセスとセンドバックなど)が1つのAPI呼び出しで動作するはずです。これを達成するためにどんな助力も非常に高く評価されます。

+1

あなたのPrintメソッドに生のJSONを取得し、その後Request1' 'にし、それは' Request2'に失敗した場合、最初にそれを逆シリアル化しようとすることができ。 – Michael

+0

@Michael:それはいいようですが、UIは3つまたは4つのオブジェクトからなるオブジェクトを私に送ります。私は何とか私はWCFでそれを処理する要求の種類を理解する必要があるか分からない。どのようなイラストのイラストが私を助けるでしょう。ありがとう! –

+0

あなたはMediatrを見ましたか? https://github.com/jbogard/MediatR –

答えて

0

これは機能する可能性がありますか?

擬似コード

[HttpPost] 
public PdfPrinterResponse Print() 
{ 
    var json = Request.Content.ReadAsByteArrayAsync().Result; 

    Requeste1 request1; 
    if(TrySerialzieTo<Request1>(json, out request1)) 
     // send request to wcf service 

    Requeste2 request2; 
    if(TrySerializeTo<Request2>(json, out requeste2)) 
     // send request to wcf service 

} 

private bool TrySerializeTo<T>(string json, out T request) 
{ 
    // use JsonConvert.Deserialize<T>(json); 
    throw new NotImplementedException(); 
} 
関連する問題