我有这样的服务合同:
[WebGet(UriTemplate = "getdata?key={key}&format={format}")]
Event[] GetIncidentsXml(string key, string format);
在编码中,我放弃了反应方式,如:
var selectedFormat = ParseWebMessageFormat(format);
WebOperationContext.Current.OutgoingResponse.Format = selectedFormat;
这一部分按预期运作,我根据所通过的参数获得XML或JSON。
当我提出例外时,情况就是如此。 如果通过的关键无效,我就这样做:
var exception = new ServiceResponse
{
State = "fail",
ErrorCode = new ErrorDetail { Code = "100", Msg = "Invalid Key" }
};
throw new WebProtocolException(HttpStatusCode.BadRequest, "Invalid Key.", exception, null);
当出现例外情况时,返回类型为always。 XML:
<ServiceResponse xmlns="http://schemas.datacontract.org/2004/07/IBI.ATIS.Web.ServiceExceptions" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ErrorCode>
<Code>100</Code>
<Msg>Invalid Key</Msg>
</ErrorCode>
<State>fail</State>
</ServiceResponse>
回归类型的变化是服务方法中第一条代码,在放弃例外之前就是如此。
我知道,我可以根据申请表确定WCF的回报类型,但要求使用通过询问显示的类型。
自动电文类型转换为:
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" />