4

我遇到了网络服务的问题。我通常的开发方法是创建如下类。

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.EntityProject.API.EntityWebService.Entity. 我想我明白为什么这不能编译,因为就编译器而言,这两个类除了它们的名字之外没有任何共同之处。

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

我考虑过让我的 web 服务只返回 XML 并在我的应用程序中序列化结果,但这似乎是一种冗长的方法,必须有更好的解决方案。任何建议将不胜感激。

4

2 回答 2

5

在处理 Web 服务时,我们采取了不尝试让 .net 对自定义对象进行常规序列化/反序列化的方法。

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

有几个原因。首先是通过使用像 JSON 这样的标准,那么几乎所有的东西都可以使用它。其次,XML 很混乱……非常混乱。做对也很难,做错也很容易。第三,我们可以更轻松地控制准确的输出。

Finally, an interesting note about passing JSON objects is that you can add new fields to it at the provider and change your consumers at a later date. It's very forgiving.

于 2012-05-08T22:22:45.030 回答
2

You shuld start using WCF.

In WCF you can expose the data you want using DataContracts.

All the serialization and deserialization happens automatically, and you get the same type on the client and on the server with no additional effort.

于 2012-05-08T22:37:57.727 回答