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
C# WCF传递复杂类型而不传递公共类型dll_C#_Wcf - Fatal编程技术网

C# WCF传递复杂类型而不传递公共类型dll

C# WCF传递复杂类型而不传递公共类型dll,c#,wcf,C#,Wcf,我正试图在WCF中摸索,在我的示例应用程序中,要求在我的网站和我的新WCF服务之间通过一门课程 我没有一个公共类型的dll,那么我如何通过服务传递我的对象呢 我的代码看起来像这样 网站 namespace HRO_-Proof { [DataContract(Name = "ThrowAway", Namespace = "http://schemas.proof.com/throwaway/")] [KnownType(typeof(ThrowAway))] public class Thro

我正试图在WCF中摸索,在我的示例应用程序中,要求在我的网站和我的新WCF服务之间通过一门课程

我没有一个公共类型的dll,那么我如何通过服务传递我的对象呢

我的代码看起来像这样

网站

namespace HRO_-Proof

{

[DataContract(Name = "ThrowAway", Namespace = "http://schemas.proof.com/throwaway/")]
[KnownType(typeof(ThrowAway))]
public class ThrowAway
{
    public Int32 MyValue { get; set; }

    public Boolean SomeFunc()
    {
        return true;
    }
}
public class StateService : IStateService
{
    public Int32 SaveThrowaway(object throwAway)
    {
        //Save to DB
        return 0; //Id of inserted record
    }

}
}

WCF服务

namespace HRO_ServiceLibarary

{

[DataContract(Name = "ThrowAway", Namespace = "http://schemas.proof.com/throwaway/")]
[KnownType(typeof(ThrowAway))]
public class ThrowAway
{
    public Int32 MyValue { get; set; }

    public Boolean SomeFunc()
    {
        return true;
    }
}
public class StateService : IStateService
{
    public Int32 SaveThrowaway(object throwAway)
    {
        //Save to DB
        return 0; //Id of inserted record
    }

}
}

我读过一些关于DataContractResolver的文章,但我不确定如何实现它

任何方向的帮助都是欢迎的

谢谢,
Mike在班上用DataMember标记每个成员。不能将函数标记为DataMember

[DataContract]
public class ThrowAway
{
    [DataMember]
    public Int32 MyValue { get; set; }
}
在职

public class StateService : IStateService
{
    public Int32 SaveThrowaway(ThrowAway throwAway)
    {
        //Save to DB
        return 0; //Id of inserted record
    }

}
现在,如果您想在网站中使用此服务,请添加服务引用,并在代理类中获得类ThrowAway

1)
[KnownType(typeof(ThrowAway))]
:与类本身具有相同类型的KnownType属性是无用的,并且是隐式强制的。你不需要它

2) 由于各种原因,几乎不能使用对象的参数类型。事实上,
对象
类上需要[KnownType(typeof(ThrowAway))],但显然您并不拥有这个类。所以得到一个更好的抽象

3) 正如Dinesh所说,在
公共Int32 MyValue{get;set;}
上需要
[DataMember]

4) 若您通过添加服务引用来使用代码生成,那个么您的方法将留在服务器上,并且永远不会离开它。但是,如果你将你的实体(一次性)分发给你的客户,那么他们就会这样做,这是一个很好的做法。回想起将接口、实体和实现分别放入单独的DLL中