【问题标题】:Lack of performance consuming Java Web Service in .net.net 中缺乏消耗性能的 Java Web 服务
【发布时间】:2011-11-02 08:43:26
【问题描述】:

我一直在使用 .net 3.5 中的 Java Web 服务,但我发现在第一次创建 Web 服务代理时性能不足。

我使用添加服务引用功能添加了 WebService 引用。至此WebService引用创建完成,下一步就是创建一个代理实例来消费Web Service。

我一直在使用的 enpoind(假设是http://crdevelopment/services/SalesService)包含 250 个肥皂方法。 因此,当我尝试使用单个 WebMehod 时,即getCustomersLocation,我执行以下代码行

var serviceResult = new SalesProxy(http://crdevelopment/services/SalesService?wsdl);

这一行需要很长时间,我假设是因为 endPoint 确实有很多 web 方法。

然后,我使用方法

var customerLocations = serviceResult .getCustomersLocation("San Jose").

Web 方法的执行不需要时间,但代理的创建需要时间。

我的问题是,为什么代理对象实例需要很长时间,即使我已经添加了 Web 服务引用并且代理必须已经创建?

这对你有意义吗?

【问题讨论】:

  • 我怀疑通过给它提供包含?wsdl 部分的URL,你让它下载并解释完全没有必要的WSDL...给它提供webservice 的URL,看看是否会改变任何东西.. .
  • 谢谢,正确的 ?wsdl 不是 WebService 引用构造函数中 URL 的一部分。它用于发现服务。

标签: .net web-services


【解决方案1】:

您的 URL 似乎有误(末尾为?wsdl):

var serviceResult = 
       new SalesProxy("http://crdevelopment/services/SalesService?wsdl");

不应该是这样的:

var serviceResult = new SalesProxy("http://crdevelopment/services/SalesService");

如果我理解正确,您在运行时不需要 WSDL,因为代理是在设计时生成的。它可以解释这个问题,因为生成的代理可能会无缘无故地加载 WSDL,这可能会导致延迟。

更新:

看起来您可能会遇到与 SoapHttpClientProtocol 构造函数中的 XML 序列化相关的延迟。请参阅此question,它包含的可能解决方案很少。此外,您可能想尝试generating WCF 客户端/代理并改用它。您需要使用“添加服务引用”,而不是“添加 Web 引用”,区别在here 列出。

【讨论】:

  • 嗨,德米特里,感谢您的回复。你是对的,我在设计时创建了代理,但我需要在运行时使用 WebService,这就是我创建引用类实例的原因。有意义吗?
  • 运行时不需要 WSDL。仅在设计时需要生成代理。生成代理后,将其指向服务本身的 URL,而不是 WSDL 的 URL。如果您按照我在答案中的建议进行更改,它对您有用吗?
  • 是的,URL 格式有误。问题出现在我需要使用 WebMethod 时。在这种情况下,我从设计时创建的服务引用创建了一个对象。我设置了服务的 URL,这个过程需要很长时间。这没有任何意义,因为 WSDL 是在设计模式下创建的。
  • 我修改了服务引用以能够使用 Microsoft.Web.Services3.WebServicesClientProtocol,我不知道该组件是否导致性能不足
  • @Michael:很可能不会。尝试使用 WCF 客户端代理。
猜你喜欢
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2017-01-19
  • 2016-05-03
  • 2013-09-11
相关资源
最近更新 更多