假设我有一个linq到sql类 . 我想通过wcf返回对象datacontext . 我已经使数据库单向 . 我把WCF工作getString()只是为了证明如果我注释掉ToolboxDataContext的所有内容,wcf服务是有效的 .
public interface Database()
{
[OperationContract]
ToolboxDataContext getCtx();
[OperationContract]
string getString();
}
public class test: Database
public ToolboxDataContext getCtx()
{
ToolboxDataContext ctx = new ToolboxDataContext ();
return ctx;
}
public string getString()
{
return "WCF WORKS";
}
[DataContract]
public class Testing //my svc file
{
[DataMember]
public ToolboxDataContext ctx;
[DataMember ]
public string Id;
}
2 回答
您的
ToolboxDataContext
是实体框架DataContext吗?假设它是......我来自接收它的客户端'm not sure sending the entire data context object over the wire is really what you want to do. It likely won' t "work" . 比如,你将无法对它运行一个Linq语句并点击数据库pr任何东西......你可能只想返回数据实体(而不是整个上下文),如图所示here (MSDN),或者可能考虑使用WCF Data Services代替?
我想一个好问题是;客户端将如何处理DataContext?
这似乎不是一个真正的问题(你的问题是什么,你在问什么?)
但假设这只是你想要反馈的想法 - 这没有意义 . 它相当于向客户端发送数据库连接 . 您无法序列化和反序列化连接,然后重复使用它 .
datacontext是一个对象,因此一旦确保使用正确的属性修饰它就应该能够序列化它,但它封装了数据库连接 . 无法序列化数据库连接 . 从概念上讲,描述该连接的所有信息都可以通过WCF进行序列化和交付,但这可能会暴露您系统中的安全漏洞 .
使用LINQ-to-SQL DataContext的正确模式是实例化它,执行您需要的任何数据库操作并处置它 . 最好不要长时间保留它,绝对不要在服务之外发布它 .