2016-08-19 43 views
0

我有一個Web API,它將一個類對象作爲輸入參數並將其發佈到WCF服務操作合同。 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); 
    } 

上述方法是好的,對我來說,但計劃只有1個API,它可以將任何類型的對象,並把它傳遞給WCF服務,我做(如果請求1,處理和發送回映射響應否則如果請求2進程和回傳等)應該與1個API調用一起工作。任何幫助,非常感謝實現這一點。

+1

你可以得到的原始JSON到您的打印方式,然後嘗試先'Request1'反序列化,如果失敗,以'Request2'。 – Michael

+0

@Michael:聽起來不錯,但用戶界面會向我發送一個包含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(); 
} 
相關問題