如何使用1种方法

时间:2016-07-15 08:01:56

标签: c# wcf generics

我有一个WCF服务,其中一个方法将从多个Web API控制器中调用,如下面的代码所示。

    public string Print(PdfPrinterRequest _request)
    {
        PdfPrinterService.PdfPrinterClient _Client = new PdfPrinterService.PdfPrinterClient();
        PdfPrinterResponse _response = new PdfPrinterResponse();
        return _Client.Print(_request.Document, out _pdfResponse);
    }

PdfPrinterRequest(Document class)是我传递以从WCF服务获取响应消息的实体。目前,文档类包含很少的属性(REquest Header)。我想从其他API调用相同的Print方法并传递类型' Customer'到WCF服务。我怎样才能实现这一目标?任何人都可以建议我正确实施吗?

以下是我的WCF服务代码

   public class PdfPrinterService : IPdfPrinter
   {
      public PdfPrinterResponse Print(PdfPrinterRequest request)
      {
        return PdfPrinterFacade.PrintPdf(request);
      }
   }

   public static PdfPrinterResponse PrintPdf(PdfPrinterRequest request)
    {
        PdfPrinterResponse response = new PdfPrinterResponse();
        //Process the request and send back the response message
    }

    [MessageContract]
    public class PdfPrinterRequest
    {
    private Document _document;

    [MessageBodyMember]
    public Document Document
    {
        get { return _document; }
        set { _document = value; }
    }
   }

如何将动态类对象作为参数传递代替PdfPrinterRequest,它不仅限于一种类型(Document)?请建议。

谢谢,

1 个答案:

答案 0 :(得分:0)

如果此服务不需要可互操作,您可以切换到使用完整.NET类型信息的NetDataContractSerializer,并且能够序列化更多类型(但不能任何类型 - 这是不可能的。)

this answer抓取UseNetDataContractSerializerAttribute并按照以下方式申请:

[UseNetDataContractSerializer]
public class PdfPrinterService : IPdfPrinter
{
   public PdfPrinterResponse Print(PdfPrinterRequest request)
   {
     return PdfPrinterFacade.PrintPdf(request);
   }
}

[MessageContract]
public class PdfPrinterRequest
{
    [MessageBodyMember]
    public object Document { get; set; }
}