我正试图通过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;
}
}
}
WCF服务
namespace HRO_ServiceLibarary
{
public class StateService : IStateService
{
public Int32 SaveThrowaway(object throwAway)
{
//Save to DB
return 0; //Id of inserted record
}
}
}
我已经阅读了一些关于DataContractResolver的内容,但我不确定如何实现它。
欢迎任何方向帮助。
谢谢, 麦克
答案 0 :(得分:0)
在类中使用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
}
}
现在,如果您想在您的网站添加服务参考中使用此服务,您应该在代理类中获得Class ThrowAway
答案 1 :(得分:0)
1)[KnownType(typeof(ThrowAway))]
:与类本身具有相同类型的KnownType属性是无用的并且是隐式强制执行的。你不需要它。
2)由于各种原因,几乎不能使用对象的参数类型。实际上你需要object
类的[KnownType(typeof(ThrowAway))],但显然你不拥有这个类。所以要获得更好的抽象。
3)正如Dinesh所说,[DataMember]
上需要public Int32 MyValue { get; set; }
。
4)如果您通过添加服务引用来使用代码生成,您的方法将保留在服务器上并且永远不会离开它。但是如果你将你的实体(ThrowAway)分发给你的客户,他们就会这样做,这是一个很好的做法。记得!将接口,实体和实现分别放入单独的DLL中。