【问题标题】:Web Services Model网络服务模型
【发布时间】:2013-09-18 00:51:41
【问题描述】:

我有 1 个站点 (MySite.com) / 1 个 Web 服务 (WebService.MySite.Com) 和一个公共库 (LibCommon)

公共库包含一个模型,例如UserModel = LibCommon.UserModel

网络服务有一个方法'Void CheckUser(LibCommon.UserModel model)'

但是,当我将 'WebService' 引用添加到 'MySite.com' 时,方法会发生变化,使其看起来像 'Void CheckUser(WebService.MySite.Com.UserModel model)'

所以我认为很公平,我可以将一个对象转换为另一个对象,因为它们是相同的,但是 .NET 说我不能这样做?

有解决办法吗?

干杯,

【问题讨论】:

  • 您需要传递 WebServiceNameSpace.CommonLib 对象作为参数。
  • 再次查看我的代码,我正在使用@StuartLC 方式。
  • 您使用的是 WCF(例如 .svc)还是 Web 服务(.asmx)?
  • 我正在使用网络服务
  • 这可能会有所帮助:wsdl.exe with /sharetypes 虽然您可能会发现如果可以将您的代码移至 WCF 或 ServiceStack 等较新的技术的优势

标签: asp.net web-services serialization soap


【解决方案1】:

注意这是针对 WCF,而不是 ASMX Web 服务:

您不能直接将原始数据类转换为 WCF 服务引用向导生成的代理类。但是,您可以在客户端重用原始数据类:

  • 添加包含传输对象的库引用(即LibCommon)作为对服务(WebService)和客户端(Mysite.com)的引用。在客户端添加服务引用时,选择高级选项卡,然后选择Reuse types in referenced assemblies。然后,这将重用公共数据传输类,而不是使用代理复制类型。

但是请注意,通过消除代理数据类,您将在客户端和服务器之间引入直接耦合 - 只有在您可以控制客户端和服务器 w.r.t 时才应该这样做。版本控制问题等(例如,能够同时部署客户端和服务器的新版本)

顺便说一句,也可以消除共享服务接口,方法是将服务器端服务合同接口移动到一个单独的通用程序集中,然后使用thisthis 等技术。

【讨论】:

    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多