我使用Visual Studio生成的代理类与SOAP Web服务进行通信。生成的类派生自System.Web.Services.Protocols.SoapHttpClientProtocol。我发现实例化类很昂贵,所以我正在考虑修改我的工厂方法以返回类的Singleton实例。根据{{3}},该类对于多线程是安全的。
有没有人有重用这些类的实例的经验?这样做是否有任何负面影响(即连接处于打开状态等)?
.NET Framework版本:2.0
答案 0 :(得分:0)
应该没有理由在单例模式中使用这些类会导致问题,但是我正在努力解决你想要解决的问题。当你说这些类实例化你用它们比较的东西是昂贵的吗?与向Web服务发出http请求的成本相比,实例化代理类的成本应该可以忽略不计。你能解释一下情况/发布一些代码,证明你的性能瓶颈是通过实例化代理类引起的。
答案 1 :(得分:0)
我可以想象除了开销之外实例化代理单例的多种原因,我同意并不是很多。最大的原因是维持服务呼叫之间的会话。想象一下,具有多个页面的应用程序都使用相同的Web服务方法。 Web服务调用的会话通常通过在代理上设置cookie参数来执行:
proxy.CookieContainer = new System.Net.CookieContainer();
如果要为每个页面操作创建新代理,则会话将在页面之间丢失。创建所有页面使用的单例代理将解决此问题。