ASP.NET可配置Web服务

时间:2012-10-09 21:48:17

标签: asp.net web-services

我在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时简单地编辑该设置吗?这么简单吗?我担心在分段与生产的代理类之间可能会发生变化,但在部署我认为对生产的任何更改之前,应该先解决这些问题。

2 个答案:

答案 0 :(得分:2)

以下文章介绍了如何通过更改引用属性,向web.config文件添加密钥以及在应用程序代码上引用此密钥来使Web服务引用动态化:

Article Link

基本上,您将拥有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";

更多信息:WebClientProtocol.Url Property