我遇到了webservices的问题。我通常的开发方法是创建如下所示的类。
namespace Project.Entities
{
public class Entity
{
//Some Members
}
}
namespace Project.Service
{
public class EntityService
{
public Project.Entities.Entity Get(int EntityID);
// More Methods to retrive Entities
}
}
当允许应用程序/网站直接访问数据库时,这对我来说很好。我现在需要通过web服务公开Project.Service方法,例如
namespace Project.API
{
public class EntitiyWebService
{
[WebMethod()]
public Project.Entities.Entity Get(int EntityID)
{
return new Project.Service.EntityService(EntityID);
}
}
}
我的问题是,如果我从另一个应用程序(使用Project.Entities)调用我的web服务,我无法将Project.Entities.Entity
转换为Project.API.EntityWebService.Entity
。我想我明白为什么这不能编译,因为就编译器而言,这两个类没有任何共同之处,只有它们的名字。
我真正需要知道的是,如果我因为不良做法而遇到这个问题,如果我需要尽快开始重新设计,或者我不应该担心它而只是将我的引用从Entities.Entity
更改为在我的应用中API.EntityWebService.Entity
(当然这不是最佳解决方案),或者我将如何创建转换方法,因为我的应用和我的网络服务都使用相同的DLL,它只是引入了web服务转换是必需的。或者如果我错误地实施了正确的想法,或者错过了某些东西。或者以上都不是......
我已经考虑过让我的网络服务只返回XML并在我的应用程序中序列化结果,但这似乎是一个漫长的方法,必须有一个更好的解决方案。任何建议都将不胜感激。
答案 0 :(得分:5)
在处理Web服务时,我们采取的方法是不让.net对自定义对象进行常规序列化/反序列化。
相反,我们使用JSON传递所有内容。有一些标准工具可以使序列化/反序列化过程非常顺利。例如http://json2csharp.com/和http://json.codeplex.com/
有几个原因。第一个是通过使用诸如JSON之类的标准,那么几乎所有东西都可以使用它。其次,XML很乱......非常混乱。这样做也很难,而且很容易做错。第三,我们可以更轻松地控制确切的输出。
最后,关于传递JSON对象的一个有趣的注意事项是,您可以在提供程序中向其添加新字段,并在以后更改您的使用者。这是非常宽容的。
答案 1 :(得分:2)
你开始使用WCF。
在WCF中,您可以使用DataContracts公开所需的数据。
所有序列化和反序列化都会自动发生,您可以在客户端和服务器上获得相同的类型,而无需额外的工作。