Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过线路发送接口定义(WCF服务)_Wcf_Entity Framework_Interface_Partial Classes - Fatal编程技术网

通过线路发送接口定义(WCF服务)

通过线路发送接口定义(WCF服务),wcf,entity-framework,interface,partial-classes,Wcf,Entity Framework,Interface,Partial Classes,我有一个WCF服务,它生成加载实体框架对象(以及用于减轻加载的一些其他结构和简单类),并将它们发送到客户端应用程序 我已经更改了其中的两个类来实现一个接口,这样我就可以在应用程序中将它们作为单个对象类型引用。很像这个例子: 但是,接口类型不会添加到我的WCF服务代理客户端thingymebob中,因为它不会在通过线路发送回来的对象中直接引用 因此,在使用服务代理类的应用程序中,我不能强制转换或引用我的接口 你知道我错过了什么吗 下面是一些示例代码: //ASSEMBLY/PROJECT 1 -

我有一个WCF服务,它生成加载实体框架对象(以及用于减轻加载的一些其他结构和简单类),并将它们发送到客户端应用程序

我已经更改了其中的两个类来实现一个接口,这样我就可以在应用程序中将它们作为单个对象类型引用。很像这个例子:

但是,接口类型不会添加到我的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
    }
}

接口在您的WSDL中不会被看作是单独的实体——它们只是将它们的方法和属性添加到公开它们的对象中

您想要完成的事情可以使用抽象类来完成。这些将被视为不同的实体


祝你好运。让我们知道您决定如何继续。

您在客户端使用的是服务引用还是web引用?是否从项目2引用项目1?我相信服务引用默认情况下会重复使用引用的类型。我没有直接在客户端应用中引用服务应用中的类型。。我之前曾想过这样做,但决定在两个应用程序之间保持隔离墙,以尽量减少依赖性。如果我要包括对EF/WCF项目的引用,我可能只是将其作为一个应用程序编写。你是对的,这个问题没有答案。实体框架部分不能从抽象类(或任何不属于同一实体模型的类)继承。因此,在我的模型中,我仍然使用接口来保持结构的有序性,但在我的客户机应用程序中,我只是使用反射来检查属性(只有2个)并盲目地将对象发送回。如果无论如何都向WCF服务方法传递了无效的对象参数,该服务方法将无论如何失败。。。没什么大不了的。干杯