【问题标题】:How to return or cast the same type from web services如何从 Web 服务返回或强制转换相同的类型
【发布时间】:2012-02-07 15:59:37
【问题描述】:

我在 asp.net (ASMX) 中创建了一个用于缓存目的的 Web 服务。 使用此 WS 的网站请求并获取共享类型对象(即,网站和 Web 服务都使用包含该对象类型的相同 DLL)。

但实际情况是,网站从 web 服务获取响应,并且类型被 WS 的名称空间包装。

例如。 如果我在共享 DLL 中有一个类 Core.Person Web 服务返回 Core.Person。 网站(即使它知道 core.person)也会得到 WebServiceNS.Person

这不允许我施放它。

从 WS 获取这些对象时,我如何仍然使用相同的原始 DLL 命名空间?

谢谢

【问题讨论】:

  • 如何将对象添加到缓存中?您可能过度编写旧对象。发布将对象添加到缓存的代码。
  • HttpRuntime.Cache.Add(cacheKey, new Core.Person(10), null, DateTime.UtcNow.AddDays(1), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching .CacheItemPriority.Default, null);
  • @AmarPalsapure - 我看不出它与缓存有什么关系
  • 抱歉弄错了。将发布一个解决方案。
  • 您在 Core 命名空间中有 Person 类,并且您在网站和 Web 服务中都引用了此 DLL。正确的?在 web 服务中,您从 Core.dll 添加 Person。对吗?

标签: asp.net web-services asmx


【解决方案1】:

您不应该将 ASMX 服务用于新开发。这是一项传统技术。

此外,它没有能力做你想做的事。另一方面,WCF 可以轻松做到这一点。

【讨论】:

    【解决方案2】:

    一种解决方案可以是使用 WCF 服务,而不是使用 ASMX 服务。 WCF 服务允许您使用现有结构进行 Web 服务调用。在这种情况下,您将不需要创建您的服务的引用。您可以在两个项目中使用相同的Core.dll

    如果您需要任何帮助,请发表评论。

    希望这对你有用。

    【讨论】:

      【解决方案3】:

      实际上,当我们添加 Web 服务引用时,VS 会生成一个存根,为 WS 所需的所有对象创建类。 (这些是基于 Web 服务器上托管的 WSDL 文件)。我们与 web 服务的所有通信都是使用这个存根完成的。我想您必须为此编写自己的copy constructor

      【讨论】:

      • 看起来很繁琐...必须有一种方法至少可以将其转换为原始类型...
      • 虽然有一些“不推荐”的方法可用。 (ryanfarley.com/blog/archive/2004/05/26/737.aspx) 在后面的段落中,您可以看到这种技术的优缺点。
      猜你喜欢
      • 1970-01-01
      • 2021-07-30
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2010-09-12
      • 1970-01-01
      相关资源
      最近更新 更多