EF에서 Context 개체를 WCF 메서드로 전달해야합니다.WCF에 Entity Framework 컨텍스트 개체 전달
일반적으로 WCF 메서드에서 Context 개체를 만들고 메서드 호출이 끝나기 전에 처리하기 때문에 대부분의 메서드에서 제대로 작동합니다.
그러나 일부 조회 테이블에 대해 캐싱을 사용할 수 있으므로 Context 개체 (특히 DBContext)를 MVC 컨트롤러에서 내 특정 WCF 메서드로 전달해야합니다. SqlDependency에 대해이 특정 개체를 사용하기 때문에 위 문장에서 수행하는 것보다는이 특정 Context 개체 (Global.asax 파일의 Application_Start 메서드에서 설정 한 개체)를 전달해야합니다. DBContext 개체를 새로 작성하려고하면 데이터베이스 호출 전에 SqlDependency를 활성화해야한다는 오류 메시지가 표시되므로 SqlDependency를 사용할 수 없습니다.
문제는 KnownType 특성 (예 : DBContext 개체)을 올바르게 선언하지 않는 것과 관련이있는 것으로 알고있는 WCF 테스트 클라이언트 도구를 시작하려고 할 때 다음과 같은 오류가 발생한다는 것입니다 (간결하게 줄임) . WCF 프로젝트는 잘 컴파일됩니다. 내 WCF 서비스에서 KnownType을 사용한 적이 없으므로이 특정 부분에 대한 도움이 필요합니다. 그들은 모두 단순한 유형 (int, string 등)입니다.
Error: Cannot obtain Metadata from http://localhost:8732/Design_Time_Addresses/YeagerTechWcfService/YeagerTechWcfService/mex
If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange
Error URI: http://localhost:8732/Design_Time_Addresses/YeagerTechWcfService/YeagerTechWcfService/mex Metadata contains a reference that cannot be resolved:
내 WCF 서비스에서 다음 OperationContract를 코드를 가지고 :
[OperationContract]
IEnumerable<Category> GetCategories(YeagerTechEntities DbContext);
내 WCF 서비스에서 다음 DataContract 코드가 마지막으로
namespace YeagerTechModel
{
[Serializable]
[DataContract(IsReference = true)]
[KnownType(typeof(YeagerTechEntities))]
public partial class Category
{
public Category()
{
this.Projects = new HashSet<Project>();
}
[DataMember]
public short CategoryID { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public virtual ICollection<Project> Projects { get; set; }
}
}
는, 다음 내 WCF입니다 방법 :
public IEnumerable<YeagerTechModel.Category> GetCategories(YeagerTechEntities DbContext)
{
//YeagerTechEntities DbContext = new YeagerTechEntities();
DbContext.Configuration.ProxyCreationEnabled = false;
IEnumerable<YeagerTechModel.Category> category = DbContext.Categories.Where(p => p.CategoryID > 0).AsCached("Categories").ToList();
//IEnumerable<YeagerTechModel.Category> category = DbContext.Categories.Where(p => p.CategoryID > 0);
CloseConnection(DbContext);
return category;
}
'null'을 반환하도록 코드를 변경하면이 오류가 사라지나요? 'KnownType'도 제거한다면 어떨까요? 한 번에 하나의 잠재적 인 오류 지점을 제거하고 이와 같은 코드를 분리하려고하면 문제를 격리하는 데 도움이됩니다. –
게시 한 오류가 발생한 후 KnowType 특성을 내 DataContract에 넣습니다. – sagesky36
인터페이스에서 컨텍스트를 전달해야한다고 생각하지 않습니다.나는 그것이 직렬화 될 것이라고 생각하지 않으며, 아마도 큰 두통을 일으킬 것이다. 그것을 제거하려고 했습니까 (아마도 당신이 그것을하는 동안 시체를 비우는 것)? 다른 방법을 사용하여 전달할 수 있지만 서버 측에서 해당 선택을 수행해야합니다. –