我最近开始阅读有关 WCF 中的 WebHttpBinding 用法以及能够使用 REST 服务的内容,但是,我现在对此有点困惑。

我正在编写一项服务,该服务向给定的 api 发出单个请求,但可以返回多个响应之一。

例如,通用响应:

<ActualResponse>
<ResponseItem>
    <Name />
    <Area />
</ResponseItem>
</ActualResponse>

但是,如果传出请求中存在无效内容或响应服务本身遇到任何类型的问题,则返回的响应将是:

<ErrorResponse>
    <Message />
</ErrorResponse>

Pedram Rezaei 发表了一篇很棒的文章 使用 REST 服务, ,这是我借用大部分信息的地方。据我所知,只要该对象定义了可序列化的属性,我们就可以创建该对象。问题是,创建哪个类没有任何条件(ErrorResponse/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> 

在你的情况,你可能有这样的:

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

<ServiceResponse> 
     <Fault> ... </Fault>
</ServiceResponse> 

和XML序列化是真的不错。 。

但它听起来像你有在信封没有控制权。事实是,你可以得到多种不同的反应。为了解决这个问题,你可以换一个做作的XML信封收到的实际响应,和反序列化的的结果。

如果你得到 ... ,把它包在deserializable信封要达到这样的 ... ,然后反序列化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top