0

我创建了 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

提前致谢。

4

1 回答 1

0

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

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

于 2013-07-30T08:06:46.717 回答