Мне нужно передать объект Context из EF в метод WCF.
Обычно я создаю объект Context в методе WCF и удаляю его непосредственно перед завершением вызова метода, который прекрасно работает для большинства моих методов.
Однако мне нужно передать объект Context (в частности, DBContext) из контроллера MVC в мой конкретный метод WCF, потому что у меня включено кэширование для некоторых справочных таблиц. Мне нужен этот конкретный объект Context (который я установил в методе Application_Start файла Global.asax), а не то, что я делаю в предложении выше, потому что я использую этот конкретный объект для SqlDependency. Если я попытаюсь создать совершенно новый объект DBContext, я не смогу использовать SqlDependency, потому что получаю сообщение об ошибке, сообщающее, что SqlDependency необходимо включить перед вызовом базы данных.
Проблема в том, что я получаю следующую ошибку (сокращенно для краткости), когда я пытаюсь запустить свой инструмент Test Client WCF, который, как я знаю, имеет отношение к неправильному объявлению атрибута KnownType (то есть объекта DBContext). Обратите внимание, что проект WCF компилируется просто отлично. Мне нужна помощь с этой конкретной частью, так как я никогда не использовал KnownType в моей службе WCF. Все они были простыми типами (int, string и т. Д.).
Ошибка: невозможно получить метаданные из http://localhost:8732/Design_Time_Addresses/YeagerTechWcfService/YeagerTechWcfService/mex
Если это служба Windows (R) Communication Foundation, к которой вы
иметь доступ, пожалуйста, убедитесь, что вы включили публикацию метаданных на
указанный адрес. Для получения помощи по включению публикации метаданных, пожалуйста,
обратитесь к документации MSDN по адресу
http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Обмен
Ошибка URI:
http://localhost:8732/Design_Time_Addresses/YeagerTechWcfService/YeagerTechWcfService/mex
Метаданные содержат ссылку, которая не может быть разрешена:
В моей службе 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;
}