我有两个实验性的Web服务。一个是包含在.net Web应用程序中的asmx。另一个是从Web应用程序调用的WCF服务库。asmx json序列化与wcf json序列化
asmx基本上做了我需要的一切,但我认为WCF会更好,除非它没有做任何事情,因为我没有做任何事情后,摆弄asmx服务。
例如,同样的方法在各个不同的行为:
' ASMX
<WebMethod(BufferResponse:=True, EnableSession:=False)>
Function Test(aObject as Object) as Object
' object will have been successfully serializaed into a dictionary
Dim lResult as SomeObject = new SomeObject(aObject)
return lResult ' lResult will be serialized as whatever type it is and will be deserialized by client making ajax call
End Function
' WCF
<OperationContract()>
<WebInvoke(RequestFormat:=ServiceModel.Web.WebMessageFormat.Json,
ResponseFormat:=ServiceModel.Web.WebMessageFormat.Json,
BodyStyle:=WebMessageBodyStyle.Wrapped)>
Function Test(aObject As Object) As Object
' object is serialized as an empty instance of Object
' not very useful
Dim lResult as SomeObject = new SomeObject(aObject) ' waste of time with useless object
return lResult ' even if lResult could be instantiated the client returns error 500 because
' WCF won't serialize SomeObject as Object
End Function
我一直在研究这个问题和关闭了好几个月,因为我有项目之间的时间。我没有试过让WCF做ASMX的工作。有任何想法吗?
很好,谢谢。纠正。 –
我们使用ajax/json与Web浏览器中的服务进行交互。我想与WCF一起出于多种原因,但我需要传递对象的能力。这仍然是一个明确的合同。如果我们想传递Object以外的抽象祖先,WCF将不会工作。 –
@MarkLauter:实际上,只要可以反序列化为具体实现,就可以序列化抽象类。您可以通过将抽象类与KnownType属性归因于您想要序列化的每个具体类来完成此操作。主要问题不是服务接口契约,而是DataContract,它需要某个具体的类。此链接描述了这些规则:http://msdn.microsoft.com/en-us/library/ms733127.aspx。你可以创建一个从对象继承而来的catchall类,并且使用已知类型装饰你想要使用的类 –