2012-05-08 17 views
4

我遇到了webservices的问题。我通常的开发方法是创建如下的类。C#web服务将类转换为自己

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); 
     } 
    } 
} 

我的问题是,如果我打电话给我的web服务从其他应用程序(使用Project.Entities)我不能转换Project.Entities.EntityProject.API.EntityWebService.Entity。我想我明白为什么这不会编译,因为就编译器而言,这两个类没有任何共同之处,而是它们的名字。

我真正需要知道的是,如果我击中,因为陋习这个问题,如果我需要尽快开始重新设计,或者如果我不应该担心它,只是从Entities.Entity改变我引用API.EntityWebService.Entity在我应用程序(当然,这不能是最好的解决方案),或者我将如何创建转换方法,因为我的应用程序和我的web服务都使用相同的DLL,它只是引入了需要转换的web服务。或者如果我错误地实施了正确的想法,或者错过了某些东西。或以上都不...

我已经考虑让我的web服务只是返回XML和序列化我的应用程序内的结果,但是这似乎是一个漫长的方法,必须有更好的解决方案。任何意见将不胜感激。

回答

5

在处理Web服务时,我们采取了不让.NET尝试定制对象的定期序列化/反序列化的方法。

相反,我们使用JSON传递所有内容。有标准的工具,使序列化/反序列化过程相当顺利。如http://json2csharp.com/http://json.codeplex.com/

有几个原因。首先是通过使用JSON等标准,那么几乎所有的东西都可以使用它。其次,XML很混乱......非常混乱。做对也很困难,而且很容易做错。第三,我们有更多的时间控制精确的输出。

最后,关于传递JSON对象的一个​​有趣的注意事项是您可以在提供程序中向其添加新字段,并在以后更改您的使用者。这是非常宽容的。

+0

@Chris ...很好的解释。在过去,我也在为序列化/反序列化问题而苦苦挣扎。 – MikeTWebb

2

你开始使用WCF。

在WCF中,您可以使用DataContracts公开您想要的数据。

所有的序列化和反序列化都会自动发生,并且在客户端和服务器上获得相同的类型,而无需额外的工作。

+0

伟大的评论。此外,您可以创建一个包含所有类定义的单独DLL项目,这样您就可以在客户端和服务器端都引用一个DLL。 – MrWuf

+0

这是一个很好的观点,在很早之前我就意识到我应该使用WCF,所以我会赞成。然而,另一个答案更具体到我的问题,所以我接受了那个。 – GarethD