1

我正在使用 Visual Studio 生成的代理类与 SOAP Web 服务进行通信。生成的类派生自 System.Web.Services.Protocols.SoapHttpClientProtocol。我发现实例化该类的成本很高,因此我正在考虑修改我的工厂方法以返回该类的 Singleton 实例。根据文档,该类对于多线程是安全的。

有没有人有重用这些类的实例的经验?这样做是否有任何负面影响(即连接保持打开状态等)?

.NET 框架版本:2.0

4

2 回答 2

0

没有理由在单例模式中使用这些类会导致问题,但是我很难理解您要解决的问题。当您说这些类的实例化成本很高时,您将它们与什么进行比较?与向 Web 服务发出 http 请求的成本相比,实例化代理类的成本应该可以忽略不计。您能否解释一下情况/发布一些代码来证明您的性能瓶颈是由实例化代理类引起的。

于 2010-05-27T22:23:59.413 回答
0

除了开销之外,我可以想象实例化代理单例的多种原因,我同意这不是很多。最大的原因是维护服务调用之间的会话。想象一个应用程序有多个页面,所有页面都使用相同的 Web 服务方法。Web 服务调用的会话通常通过在代理上设置 cookie 参数来执行:

proxy.CookieContainer = new System.Net.CookieContainer();

如果您为每个页面操作创建一个新代理,会话将在页面之间丢失。创建一个所有页面都使用的单例代理可以解决这个问题。

于 2011-04-08T16:07:07.467 回答