C# WCF正在使用多个可能的REST响应

C# WCF正在使用多个可能的REST响应,c#,wcf,rest,webhttpbinding,C#,Wcf,Rest,Webhttpbinding,我最近开始阅读关于WebHttpBinding在WCF中的使用,并且能够使用REST服务,然而,我现在在这方面遇到了一些困难 我正在编写一个服务,它向给定的api发出一个请求,但可以返回多个响应中的一个 例如,一般响应: <ActualResponse> <ResponseItem> <Name /> <Area /> </ResponseItem> </ActualResponse> 但是,如果传出请求中

我最近开始阅读关于WebHttpBinding在WCF中的使用,并且能够使用REST服务,然而,我现在在这方面遇到了一些困难

我正在编写一个服务,它向给定的api发出一个请求,但可以返回多个响应中的一个

例如,一般响应:

<ActualResponse>
<ResponseItem>
    <Name />
    <Area />
</ResponseItem>
</ActualResponse>
但是,如果传出请求中的某些内容无效,或者响应服务本身遇到任何类型的问题,则返回的响应将是:

<ErrorResponse>
    <Message />
</ErrorResponse>
佩德拉姆·雷扎伊(Pedram Rezaei)在上发表了一篇很好的帖子,这是我大部分信息的来源。据我所知,我们可以创建一个对象,只要该对象定义了可序列化的属性。问题是,不存在要创建哪个类的条件derRorResponse/ActualResponse

我不确定我是否应该研究某种类型的TryParse功能,如果没有反序列化,或者有更优雅的方法,它会发送初始请求并捕获错误


我对WCF的世界还很陌生,所以有可能我完全忽略了一些东西

我想你可以借鉴SOAP的一些做法,它的层次结构如下:

<soap:Envelope>
    <soap:Body>
        ... message contents
    </soap:Body>
</soap:Envelope> 
我不是建议您使用SOAP,而是建议您从SOAP使用的设计中学习。SOAP所做的是将成功的或实际的响应嵌入到正文中,或者在正文中返回一个

SOAP的成功可能如下所示:

<soap:Envelope>
    <soap:Body>
        <ActualResponse>... </ActualResponse>
    </soap:Body>
</soap:Envelope> 
<soap:Envelope>
    <soap:Body>
        <soap:Fault>... </soap:Fault>
    </soap:Body>
</soap:Envelope> 
虽然故障可能如下所示:

<soap:Envelope>
    <soap:Body>
        <ActualResponse>... </ActualResponse>
    </soap:Body>
</soap:Envelope> 
<soap:Envelope>
    <soap:Body>
        <soap:Fault>... </soap:Fault>
    </soap:Body>
</soap:Envelope> 
在您的情况下,您可能会遇到以下问题:

<ServiceResponse> 
     <ActualResponse> ... </ActualResponse>
</ServiceResponse> 

XML序列化在这方面非常好

但听起来你好像无法控制信封。事实上,您可以得到多个不同的响应。要处理这个问题,您可以将收到的实际响应包装在一个精心设计的XML信封中,并对结果进行反序列化


如果你得到,将其包装在可反序列化的信封中以获得类似于…,然后反序列化

我想你可以借鉴SOAP的一些做法,它的层次结构如下:

<soap:Envelope>
    <soap:Body>
        ... message contents
    </soap:Body>
</soap:Envelope> 
我不是建议您使用SOAP,而是建议您从SOAP使用的设计中学习。SOAP所做的是将成功的或实际的响应嵌入到正文中,或者在正文中返回一个

SOAP的成功可能如下所示:

<soap:Envelope>
    <soap:Body>
        <ActualResponse>... </ActualResponse>
    </soap:Body>
</soap:Envelope> 
<soap:Envelope>
    <soap:Body>
        <soap:Fault>... </soap:Fault>
    </soap:Body>
</soap:Envelope> 
虽然故障可能如下所示:

<soap:Envelope>
    <soap:Body>
        <ActualResponse>... </ActualResponse>
    </soap:Body>
</soap:Envelope> 
<soap:Envelope>
    <soap:Body>
        <soap:Fault>... </soap:Fault>
    </soap:Body>
</soap:Envelope> 
在您的情况下,您可能会遇到以下问题:

<ServiceResponse> 
     <ActualResponse> ... </ActualResponse>
</ServiceResponse> 

XML序列化在这方面非常好

但听起来你好像无法控制信封。事实上,您可以得到多个不同的响应。要处理这个问题,您可以将收到的实际响应包装在一个精心设计的XML信封中,并对结果进行反序列化

如果你得到,将其包装在可反序列化的信封中以获得类似于…,然后反序列化