我在ASP.NET 2.0网站项目中有一个Web服务引用。我希望能够在服务的登台版和生产版之间切换,而无需更改我的代码。
但是,我没有看到如何以干净的方式做到这一点。我知道我可以将web.config更改为指向其他一些服务URL,但那么我的代码是否仍然硬编码为一个引用或另一个引用?
我看到了this post,但是你如何编辑代理类呢?如果我在类上“转到定义”,它不会带我到任何我可以编辑的类,但它是对象浏览器...我是否需要运行wsdl.exe实用程序以便它将生成代理我可以编辑的课程吗?
编辑#1:以下是我用来实例化和调用服务的代码:
Dim service As New Swan.MagellanLeadSheetService()
Dim response As Swan.MagellanLeadSheetResponse = service.Foo(stuffToSendToService)
编辑#2:由于web.config在appSettings区域中已经有了URL端点地址,我可以在部署到Production以指向生产URL时简单地编辑该设置吗?这么简单吗?我担心在分段与生产的代理类之间可能会发生变化,但在部署我认为对生产的任何更改之前,应该先解决这些问题。
答案 0 :(得分:2)
以下文章介绍了如何通过更改引用属性,向web.config文件添加密钥以及在应用程序代码上引用此密钥来使Web服务引用动态化:
基本上,您将拥有2个版本的web.config文件,生产和登台,并定义了不同的URL。虽然代码将指向一个独特的位置。
<强>更新强>
现在,在以下行之前,您必须根据web.config中的内容更改service.URL。
Dim response As Swan.MagellanLeadSheetResponse = service.Foo(stuffToSendToService)
答案 1 :(得分:1)
首先,这里有一些关于如何向项目添加Web引用的信息:
How to: Add and Remove Web References
然后你的webservice类的实例(派生自SoapHttpClientProtocol
的代理类)必须有一个名为url的属性,你可以在运行时将该属性从staging或production生成到你的asmx。
CountryService service = new CountryService();
service.Url = "http://foo/bar.asmx";