【问题标题】:Conflict between Smartclient classes and webservice classesSmartclient 类和 webservice 类之间的冲突
【发布时间】:2013-07-30 07:49:36
【问题描述】:

我已经创建了 smartliclient 和 web 服务。 我已经创建了带有 web 服务 + 相关类的服务器和带有桌面应用程序的客户端。 在 smartclient 项目中,命名空间和类名与 servver-webservices 中的相同。 客户项目中的问题 -

using SmartInstitute.Automation.SmartInstituteServices.CourseService; // webservice
CourseService service = new CourseService();
SmartInstitute.Course[] allCourses = service.GetAllCourses();

SmartInstitute.Course - 存在于 smartClient 项目中。 它的显示如下。错误 -

不能隐式转换类型 'SmartInstitute.Automation.SmartInstituteServices.CourseService.Course[]' 到“SmartInstitute.Course[]”

如果您想了解更多信息,请告诉我。 我指的是http://www.codeproject.com/Articles/11163/Developing-Next-Generation-Smart-Clients-using-NET

提前致谢。

【问题讨论】:

    标签: c# web-services asp.net-4.5 smartclient


    【解决方案1】:

    命名空间相同;一方面,很明显是SmartInstitute.Automation.SmartInstituteServices.CourseService,与SmartInstitute。如果这是 WCF 服务,那么当您添加该服务时,IDE 和命令行工具中有一个选项可以重用现有类型 - 您必须确保已启用此功能,并且程序集声明类型是指定的。但是,最简单的方法是将 DTO 类型(Cource 等)放在一个专用的简单程序集中,由两个层引用和使用 - 然后它通常“正常工作” - 至少与 WCF 一起使用。如果您使用 2.0 风格的 asmx Web 服务,那么:它将永远无法工作(它不支持这种情况)。

    另一种选择是:将 Web 服务代理类型视为与您的主域模型无关的 DTO 类型。然后映射 DTO 类型和您的域模型之间的数据(有一些像 AutoMapper 之类的工具可以帮助解决这个问题,但老实说:只需几行代码即可手动完成)。然后代理类型只到封装 Web 服务的代码(你正在封装它,是吗?)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多