2010-05-27 72 views
1

我正在使用Visual Studio生成的代理类与SOAP Web服务进行通信。生成的类派生自System.Web.Services.Protocols.SoapHttpClientProtocol。我发现这个类实例化很昂贵,所以我正在考虑修改我的工厂方法以返回该类的Singleton实例。根据the documentation,该类对于多线程是安全的。.NET Web服务代理类是否安全地用作单例?

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

.NET Framework版本:2.0

回答

0

不应该有任何理由,在一个单例模式使用这些类应该引起问题,但是我很有点吃力unserstand你想解决什么问题。当你说这些类实例化你比较它们的代价是昂贵的吗?实例化代理类的成本与向Web服务发出http请求的成本相比应该是微不足道的。你能解释一下这些情况吗?/发布一些代码来证明你的性能瓶颈是由实例化代理类引起的。

+0

事实证明,实例化的成本是由于从应用程序配置文件中生成的设置加载Web服务URL所致。这是一次性成本,所以你是正确的,应该不需要重用代理实例。 – Mario 2010-05-31 19:42:38

0

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

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

如果要创建为每个页面操作一个新的代理,该会议将于页输给页面。创建所有页面使用的单例代理将解决此问题。