我一直在使用.net 3.5中的Java Web服务,但我在第一次创建Web服务代理时看到了性能不足。
我使用添加服务引用功能添加了WebService引用。此时创建了WebService引用,下一步是创建一个代理实例来使用Web Service。
我一直在使用的指针(让我们说是http://crdevelopment/services/SalesService)包含250种肥皂方法。
所以当我尝试使用单个WebMehod,即getCustomersLocation
时,我会执行以下代码行
var serviceResult = new SalesProxy(http://crdevelopment/services/SalesService?wsdl);
这一行需要很长时间,我认为这是因为endPoint确实有很多网络方法。
然后,我使用方法
var customerLocations = serviceResult .getCustomersLocation("San Jose").
Web方法的执行不需要花费时间,但代理创建可以。
我的问题是,为什么代理对象实例需要很长时间,即使我已添加Web服务引用并且必须已创建代理?
这对你有意义吗?
答案 0 :(得分:1)
看起来你有一个错误的网址(?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。