C# WCF传递复杂类型而不传递公共类型dll
我正试图在WCF中摸索,在我的示例应用程序中,要求在我的网站和我的新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
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
}
}
现在,如果您想在网站中使用此服务,请添加服务引用,并在代理类中获得类ThrowAway1)[KnownType(typeof(ThrowAway))]
:与类本身具有相同类型的KnownType属性是无用的,并且是隐式强制的。你不需要它
2) 由于各种原因,几乎不能使用对象的参数类型。事实上,对象
类上需要[KnownType(typeof(ThrowAway))],但显然您并不拥有这个类。所以得到一个更好的抽象
3) 正如Dinesh所说,在公共Int32 MyValue{get;set;}
上需要[DataMember]
4) 若您通过添加服务引用来使用代码生成,那个么您的方法将留在服务器上,并且永远不会离开它。但是,如果你将你的实体(一次性)分发给你的客户,那么他们就会这样做,这是一个很好的做法。回想起将接口、实体和实现分别放入单独的DLL中