[英]Return multiple response from WCF
我在服务中有一个WCF服务和一个名为GetStudentList()的方法。当它返回单个响应时工作正常。这样的事情
[WebGet(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
List<Student> GetStudentList();
但我想返回多个响应,即xml和json都是这样的
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[WebGet(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
List<Student> GetStudentList();
有可能吗?如果是,那怎么样?
它可能在.NET 4.0中,但不是以您指定的方式。 .NET 4.0为WebHttp行为添加了新参数:
<endpointBehaviors>
<behavior name="WebHttp">
<webHttp automaticFormatSelectionEnabled="true" />
</behavior>
</endpointBehaviors>
使用自动格式选择时,响应的格式基于:
因此,如果您使用JSON请求调用REST服务,您将获得JSON。 如果您使用POX请求调用它,您将获得XML。 自动格式选择的完整描述在MSDN中 。
我不认为可以使用一个调用将对象作为Json和XML返回。 在这方面,可以将WCF视为正常的方法调用; 你调用一个方法,你得到一个序列化的返回值。 一旦服务向呼叫者返回了一个响应,呼叫就完成了。
仔细考虑为什么要使用这两种响应类型; 它们都是对象序列化的信息性通用标准,并且使用WCF,如果直接使用序列化响应文本,则只需要两者。 如果可能的话,我会重构客户端以使用相同的响应类型。
如果真的需要两种类型,最简单的解决方法是提供此方法的两个“重载”,并使每个客户端类型足够智能以知道它需要进行哪个调用。 因为差异不在方法签名中,所以它不是真正的重载; 您必须通过名称(GetStudentListJSON与GetStudentListXML)或通过在不同的服务类中查找方法来分隔它们。
您还可以始终返回一种响应类型,并在需要以其他格式序列化的对象时通过反序列化/重新序列化在客户端进行转换。 这确实要求您使用在调用的客户端控制的.NET代码。
我不知道如何从服务操作中获得2个输出。 您始终可以获取XML(序列化DataContract),然后“JSON Serialize”。 这是你如何做到的。
List<Student> studentList = GetStudent();
string jsonString = JsonSerialize(studentList.GetType(), studentList);
然后将此函数添加到实用程序类:
public static string JsonSerialize(Type type, object objectGraph)
{
MemoryStream memoryStream = new MemoryStream();
try
{
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(type);
serializer.WriteObject(memoryStream, objectGraph);
return Encoding.Default.GetString(memoryStream.ToArray());
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (memoryStream != null) memoryStream.Close();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.