2013-03-25 2 views
2

WCF 데이터 서비스 OData 서비스 (둘 다 v5.3.0)를 사용하는 클라이언트 응용 프로그램이 있습니다. 나는 클라이언트 애플리케이션이 Atom Pub XML 대신에 JSON을 사용하여 서비스와 통신하도록한다.서비스 메타 데이터를 참조하지 않고 WCF Data Services Client를 사용하여 JSON 표시 형식을 사용할 수 있습니까?

IEdmModel 인스턴스를 제공하지 않고이 작업을 수행 할 수 있습니까? 그것은 아톰 형식을 사용할 때 수행하는 것이 가능하다 :

 var ctx = new DataServiceContext(_oDataSvcUri, DataServiceProtocolVersion.V3) 
     { 
      IgnoreMissingProperties = true 
     }; 

     // this isn't explicitly needed, as it uses Atom by default 
     ctx.Format.UseAtom(); 

     return ctx; 

이 JSON을 사용하여 작동하려면이 필요 무슨의 예입니다 반면 :

 var ctx = new DataServiceContext(_oDataSvcUri, DataServiceProtocolVersion.V3) 
      { 
       IgnoreMissingProperties = true 
      }; 

     const string svcMetadata = "*insert contents of http://example.com/YourData.svc/$metadata here*"; 

     var xmlReader = XmlReader.Create(new StringReader(svcMetadata)); 

     IEdmModel edmModel = EdmxReader.Parse(xmlReader); 

     ctx.Format.UseJson(edmModel); 

     ctx.ResolveName = type => type.FullName; 
     ctx.ResolveType = typeName => Type.GetType(typeName + ", " + "MyDomainModelAssemblyName"); 

     return ctx; 

내가 사용할 수 있도록하고 싶습니다이 JSON 형식으로 IEdmModel을 지정하지 않고 Atom을 사용할 수 있습니다. 이것이 가능한가?

답변

0

클라이언트 측 서버 모델없이 WCF Data Services 클라이언트를 사용하여 JSON 라이트 페이로드를 읽을 수 없습니다. JSON 라이트 페이로드는 클라이언트가 서버 모델을 이해하고이를 사용하여 남겨진 모든 여분의 메타 데이터를 계산할 수 있다고 가정하기 때문에 정확하고 작습니다.

그러나 서버의 $ 메타 데이터 문서를 직접 구문 분석하는 데 반드시 EdmxReader를 사용할 필요는 없습니다. Visual Studio에서 "서비스 참조 추가"를 사용하여 클라이언트 측 클래스를 생성하고 DataServiceContext 클래스 (직접 DataServiceContext가 아님)를 사용하는 경우 생성 된 파생 클래스에 명시 적으로 제공 할 필요없이 ctx.Format.UseJson()을 호출 할 수 있도록 일부 구성이 이미 설정되어 있습니다 모델.

+0

답장을 보내 주셔서 감사합니다. Jen. 서버 측 모델을 포함하는 어셈블리는 클라이언트 측에서 사용할 수 있습니다 (둘 다 소유하고 있음). 서비스 참조/메타 데이터 업데이트 XML을 업데이트하지 않고도 JSON을 사용하여 서비스를 사용할 수 있습니다. 파일 또는 문자열을 내 클라이언트 응용 프로그램에 저장합니다. DataServiceContext에서 CreateQuery 메서드를 호출 할 때 deserialise하기 위해 형식을 전달하기 때문에 이것이 가능해야합니다 : 'dataServiceContext.CreateQuery VariableContent

+0

불행하게도 형식만으로는 충분하지 않습니다. . 클라이언트는 JSON Light을 읽을 수 있도록 전체 모델을 필요로합니다. 서비스 참조를 업데이트 할 수 없거나 클라이언트에서 문자열 리소스를 변경할 수없는 경우 EdmLib에서 생성 가능한 API (Microsoft.Data.Edm.Library 네임 스페이스의 Microsoft.Data.Edm.dll을 통해 사용할 수 있음)를 사용하여 IEdmModel의 인스턴스. 예를 들면 다음과 같습니다. EdmModel model = new EdmModel(); model.AddElement (새 EntityType (...)). API 사용법은 쉽게 발견 할 수 있어야하지만 질문이있는 경우 (이 경로를 선택하기로 결정한 경우) 물어보십시오. –

+0

"새 EntityType()"이 아닌 "새 EdmEntityType()"이어야하지만 주석 편집을위한 5 분 제한 시간이 넘었습니다. :) –

관련 문제