2009-05-19 2 views
0

У меня есть служба WCF, которая генерирует нагрузки объектов Entity Framework (а также некоторые другие структуры и простые классы, используемые для облегчения загрузки) и отправляет их клиентскому приложению.Отправка определения интерфейса через провод (служба WCF)

Я изменил 2 класса для реализации интерфейса, чтобы я мог ссылаться на них в своем приложении как на один тип объекта. Очень похоже на этот пример: Is it Possible to Force Properties Generated by Entity Framework to implement Interfaces?

Однако тип интерфейса не добавляется к моему прокси-клиенту службы WCF thingymebob, поскольку он напрямую не ссылается на объекты, которые отправляются обратно по проводу.

Поэтому в моем приложении, которое использует прокси-классы обслуживания, я не могу бросить или ссылаться на мой интерфейс ..

Любые идеи, что я пропавшими без вести?

Вот пример кода:

//ASSEMBLY/PROJECT 1 -- EF data model 

namespace Model 
{ 
    public interface ISecurable 
    { 
     [DataMember] 
     long AccessMask { get; set; } 
    } 

    //partial class extending EF generated class 
    //there is also a class defined as "public partial class Company : ISecurable" 
    public partial class Chart : ISecurable 
    { 
     private long _AccessMask = 0; 
     public long AccessMask 
     { 
      get { return _AccessMask; } 
      set { _AccessMask = value; } 
     } 

     public void GetPermission(Guid userId) 
     { 
      ChartEntityModel model = new ChartEntityModel(); 
      Task task = model.Task_GetMaskForObject(_ChartId, userId).FirstOrDefault(); 
      _AccessMask = (task == null) ? 0 : task.AccessMask; 
     } 
    } 
} 

//ASSEMBLY/PROJECT 2 -- WCF web service 
namespace ChartService 
{ 
    public Chart GetChart(Guid chartId, Guid userId) 
    { 
     Chart chart = LoadChartWithEF(chartId); 
     chart.GetPermission(userId); //load chart perms 
     return chart; //send it over the wire 
    } 
} 
+0

Используете ли вы ссылку на службу или веб-ссылку в клиенте? Являются ли ссылки на проект 1 из проекта 2? Я полагаю, что ссылка на службу повторно использует ссылочные типы по умолчанию. – JohnOpincar

+0

Я не ссылаюсь на типы из приложения «Сервис» непосредственно в своем клиентском приложении. Я думал об этом раньше, но решил сохранить стену между двумя приложениями, чтобы минимизировать зависимость. Если бы я собирался включить ссылки на проекты EF/WCF, я мог бы просто написать это как одно приложение. – misteraidan

ответ

1

Интерфейсы не будут попадаться как отдельные объекты в вашем WSDL - они будут просто их методы и свойства, добавленные к объекту, который выставляет их.

Что вы хотите достичь, вы можете использовать абстрактные классы. Они будут восприниматься как разные сущности.

Удачи. Сообщите нам, как вы решили продолжить.

+0

Вы правы, ответа на эту проблему нет. Частичная структура сущности не может наследовать от абстрактного класса (или любого класса, если это не относится к той же модели сущности). Поэтому в моей модели я все еще использую интерфейс для сортировки моей структуры, но в своем клиентском приложении я просто использую рефлексию для проверки свойств (их всего 2) и отправки объектов обратно вслепую. Методы службы WCF в любом случае потерпят неудачу, если в любом случае ему передается недействительный параметр param ... no biggy. Cheers. – misteraidan

Смежные вопросы