두 개의 실험적인 웹 서비스가 있습니다. 하나는 .net 웹 응용 프로그램에 포함 된 asmx입니다. 다른 하나는 웹 응용 프로그램에서 호출되는 WCF 서비스 라이브러리입니다.asmx json serialization 대 wcf json serialization
asmx는 기본적으로 필요한 모든 것을 수행하지만, asmx 서비스를 만지작 거리다가 기대하는 것 이외에는 WCF가 더 좋을 것이라고 생각합니다.
예를 들어, 같은 방법이 각각 다르게 작동 : 내가 프로젝트 사이의 시간을 가지고
' 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을 사용하여 웹 브라우저에서 서비스와 상호 작용합니다. 여러 가지 이유로 WCF와 함께 가고 싶지만 객체를 전달할 수 있어야합니다. 그것은 여전히 명백한 계약입니다. WCF는 Object가 아닌 추상 조상을 전달하려는 경우에도 작동하지 않습니다. –
@MarkLauter : 사실, 구체적인 구현으로 직렬화 해제 될 수있는 한 추상 클래스를 직렬화 할 수 있습니다. 직렬화하려는 각 구체적인 클래스에 대해 KnownType 특성을 가진 추상 클래스를 지정하여이 작업을 수행 할 수 있습니다. 주요 문제는 서비스 인터페이스 계약이 아니라 특정 시점에서 구체적인 클래스가 필요한 DataContract입니다. 이 링크는 규칙을 설명합니다. http://msdn.microsoft.com/en-us/library/ms733127.aspx. 당신은 객체로부터 상속받은 catchall 클래스를 만들 수 있고 사용하고자하는 클래스에 대해 알려진 타입으로 꾸며져 있습니다. –