C# 使用单一ASMX web服务代理可以吗?

C# 使用单一ASMX web服务代理可以吗?,c#,web-services,asmx,C#,Web Services,Asmx,我正在使用ASMXWeb服务处理一些用.NET3.5编写的遗留代码 windows服务(称之为FooService)正在静态缓存web服务(称之为BarWS)的ASMX代理,该服务大约每小时调用10-30次以响应客户端请求 作为遗留代码,由于各种原因,测试起来非常困难。我正在打破依赖关系以使其可测试,这个静态引用让我感到疑惑。我使用ASMX已经好几年了,我记得代理是线程安全的——但我想知道,当单例/共享WCF代理出现问题并出现故障时,它是否会像单例/共享WCF代理那样变得无法使用 考虑到这个代理

我正在使用ASMXWeb服务处理一些用.NET3.5编写的
遗留代码

windows服务(称之为FooService)正在静态缓存web服务(称之为BarWS)的ASMX代理,该服务大约每小时调用10-30次以响应客户端请求

作为
遗留代码,由于各种原因,测试起来非常困难。我正在打破依赖关系以使其可测试,这个静态引用让我感到疑惑。我使用ASMX已经好几年了,我记得代理是线程安全的——但我想知道,当单例/共享WCF代理出现问题并出现故障时,它是否会像单例/共享WCF代理那样变得无法使用

考虑到这个代理的少量使用(BarWS的调用次数不到30次/小时),我认为在每次调用时创建一个新的代理会安全得多——但我只是想知道我是否会做出不必要的更改。有人知道吗


另外,我知道WCF更好,但是在这个
遗留代码库中,现在迁移到WCF太多了。

测量创建代理所需的时间。如果这是一个错误的优化(我强烈怀疑它是),那么将其更改为基于实例的创建。一般来说,避免静校正是很好的。把它放在一个工厂后面,那么如果你真的想,至少你仍然可以有单例类型的行为,但是这种创造性的行为将被屏蔽,并且独立于客户端。

遗留的
.NET 3.5
。。。哇。。。我觉得自己老了!:)什么是遗留代码的意义,它是斜体化两次?@杰姆斯:你不必改变服务到WCF,而是考虑改变使用“服务引用”而不是“Web引用”。遗留代码的一个定义是没有测试的代码,因此你可以很容易地在.NET 4中编写遗留代码,公平地说,大部分遗留代码都是用.NET2.0编写的,随后重新编译。斜体字强调的是,legacy是一种俚语,表示真正糟糕的未经测试的代码(请参阅Michael Feathers的开创性著作“使用legacy代码”,它推广了这一定义)。假设这个代理出现在一个包含8000行代码的方法的类中…我99%确定这是一个错误的优化。。。不过我很喜欢工厂的想法——谢谢。我对这个答案投了赞成票,但并没有勾选它,因为它并没有完全确定代理实例在失败后的可重用性问题。谢谢@当然,我不知道(不记得)它是否有状态。如果是的话,你显然还有一个更大的问题:它是线程安全的吗?MSDN文档声称它是线程安全的,但我还没有测试过。测试这一点和失败下的行为是相当棘手的,因为该服务的唯一实现(当然)是一个实时生产服务(没有WSDL,没有源代码:)。如果无法摆脱它,我将不得不对其进行反向工程@James如果我没记错的话,你可以通过在服务URL上加上“?wsdl”来获取wsdl。好主意。。。如果服务器端的web服务看起来不是用自定义java实现手动启动的话。:)