WCF 데이터 서비스 ODATA 제공 업체를 웹 API로 변환하는 가장 간단한 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/19825159

문제

현재 현재 WCF 데이터 서비스 ODATA 제공 업체를 Web API ODATA로 변환 할 수있는 타당성을보고 있습니다.

나는 웹 API의 ODATA 구현에 약간 혼란스러워합니다. WCF 데이터 서비스를 사용하면 SQL Server 백엔드에서 많은 테이블을 노출시키는 ADO.NET 엔티티 모델의 최상위에 위치하고 있습니다. 즉, WCFD를 ADO 모델을 생성 할 수있는 다음 표준을 통해 모든 테이블에 액세스 할 수 있습니다. Odata Syntax.

지금까지 모든 읽기에서 Web API를 사용하면 노출하려는 모든 테이블/객체에 대해 컨트롤러 또는 별도의 작업을 생성합니까? 내가 뭔가를 놓치고 있습니까? Odata Web API 컨트롤러가 ADO 데이터 모델에서 전체 모델을 노출시킬 수있는 방법이 있습니까? 모든 테이블에 대한 액션을 만들어야하는 것은 혼란과 과잉입니다.

현재 테이블을 추가 해야하는 경우 EDMX에 매핑되며 WCFD는 모델의 전체 컨텍스트에 매핑되어 자동으로 노출됩니다.

도움이 되었습니까?

해결책

모델 생성

당신은 할 수 있습니다 :

  • 사용 컨벤션 모델 빌더 ASP.NET Web API에서 이것은 EF의 자체 컨벤션 모델 빌더가 생산하는 것과 다른 모델을 생성합니다. IEdmModel. 보다 이 질문 그러나 Model-First 또는 Database-First를 사용하는 경우 이 방법은 실제로 거꾸로 보이지만 대부분 작동합니다.
  • EF 모델을 직렬화하고이를 다시 작성하십시오 IEdmModel (보다 이 질문). 다시 이것은 실제로 비효율적입니다. Model-First 또는 Database-First를 사용하는 경우 EDMX 파일을 제조하여 IEdmModel. 여전히 내부적으로 다른 모델을 생성하지만 적어도 CDSL은 CLR 코드 규칙보다 더 안정적인 형식이므로 두 개의 다른 컨벤션 기반 모델 빌더를 사용할 때 얻는 것보다 덜 놀라운 일이있을 수 있습니다.

그 이유는 ASP.NET Web API Odata Extensions가 EDMLIB를 사용하고 EF는 자체 코드를 사용하고 그들이 함께 일할 계획이 없습니다. 어쩌면 당신은 찾을 수 있습니다 이 폭언 궁금하다면 유용합니다.

API 작업

고유 한 소스에서 모델을 생성 한 후 (단일 장소에서 모델에서 작업 할 수 있음) 기본적으로 엔티티 당 컨트롤러를 만들어야합니다. 웹 API의 요점은 자동으로 물건을 구축하는 것이 아니라 개발자에게 유연성을 제공하는 것입니다. 그만큼 EntitySetController 중복성을 줄이는 데 도움이되지만 상자에서 모든 것을 제공하지는 않습니다.

물러서서

위에서 언급 한 란트에서 나는 또한 서비스 계층 API와 a 데이터 레이어 API. ASP.NET Web API는 서비스에 더 적합한 반면 Odata는 서비스를 어색하게 만듭니다. 반면, Odata는 데이터에 액세스 할 수있게하며 (본질적으로 편안한 SQL과 같은) 데이터 모델에 직접 연결되어 있기 때문에 WCF 데이터 서비스를 통해 보았던 많은 것들을 자동화 할 수 있습니다. Odata 확장 기능이있는 ASP.NET 웹 API는 중간에 있으며 그 값은 보편적으로 합의되지 않습니다 (서비스 API에 특정 비트의 ODATA URI 구문을 사용하는 것은 확실히 유용합니다).

ASP.NET Web API 주변의 최근의 버즈에 의해 너무 과장되지 마십시오. IT 및 WCF 데이터 서비스는 매우 다른 짐승이며 디자인의 다른 레이어에서 실행됩니다. 실제로, 멀티 계층 아키텍처에서는 WCF 데이터 서비스를 사용하여 구축 된 ODATA API 위에 앉아있는 ASP.NET 웹 API를 사용하여 구축 된 서비스 API를 잘 볼 수 있습니다.

제 조언은 구축하려는 내용에 대해 신중하게 생각하고 답변에 따라 ASP.NET Web API를 선택하고 노출 된 API가 데이터 중심 ODATA API와는 매우 다르다는 사실을 받아들입니다. WCF 데이터 서비스와 함께.

가능한 계획

웹에서 "비 CRUD 웹/RESTFUL/HYPERMEDIA API"와 같은 용어를 검색하거나 Servicestack과 같은 제품을 비교하여 데이터 지향 API를 옹호하여 웹에서 웹에서 웹에서 많은 자료를 찾을 수 있습니다.

아직 프로젝트의 성격에 대해 확신이 없다면 프로토 타입.

  • 웹 API가있는 본질적으로 동일한 컨트롤러가 많으면 각각 정확히 하나의 엔터티에 매핑되면 API가 데이터 지향적입니다. WCF 데이터 서비스를 사용하십시오.
  • WCF 데이터 서비스를 갖춘 많은 ODATA 작업과 어색한 엔티티가 있으면 API의 서버 측에 더 많은 도메인 로직이 필요하며 데이터 지향만으로도 충분하지 않습니다. 웹 API와 함께 이동하십시오. 여기서 좋은 규칙은 SQL DBMS에서 저장된 절차를 취급하는 것처럼 Odata 행동을 치료하는 것입니다. 실제로 Odata 서버를 DBM으로 취급하십시오. 왜냐하면 그것이 바로 그 이유이기 때문입니다. SQL 인터페이스 뒤에 놓지 않으면 Odata 인터페이스 뒤에 놓지 마십시오.

중요 (업데이트)

2014 년 3 월 27 일에 WCF 데이터 서비스가 될 것이라고 발표했습니다. 중단 ASP.NET Web API를 선호하는 Microsoft 여기에 노출 된 "Data-Layer"사용 사례를 처리하기 위해 Microsoft는 ASP.NET Web API를 확장 할 계획이라고 밝혔다. 약간 지역 사회 노력 또한 진행 중입니다. WCF 데이터 서비스는 어느 시점에서 오픈 소스를 제공 할 것이므로 새로운 관리자가 인수 할 수는 없지만 불확실하지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top