如何使用ASMX Web服务的不同代理类版本(生产或测试)

时间:2009-12-01 17:27:59

标签: asp.net visual-studio web-services asmx proxy-classes

我在Visual Studio 2005中有一个ASMX Web服务作为一个单独的项目。为了追求每个a CODE Magazine tutorial的“程序集分离”,我的代理类在一个单独的类库项目中,不包含我的代码 - 只是名为 ASMXproxy 的网络参考,其中包含相关的 reference.cs app.config ,。。disco和.wsdl文件。因此,编译时我有一个 FileServiceProxy.dll

为了使用这个WS,我在同一个解决方案中有一个名为FileServiceDemo的Web应用程序项目。它没有Web引用,而是对FileServiceProxy.dll的“常规”引用。在我的default.aspx.cs文件中,我通过这些片段访问了我的WS:

using FileServiceProxy.ASMXproxy;
public partial class _Default : System.Web.UI.Page
{
    ASMXproxy.FileService brokerService;
protected void Page_Load(object sender, EventArgs e)
{
    try
        {
            brokerService = new ASMXproxy.FileService();

因此,当事情以这种方式正常工作时,当我想测试部署版本或更改“localhost”版本时,我发现它很尴尬。我不能简单地对app.config进行更改:

<applicationSettings>
    <FileServiceProxy.Properties.Settings>
        <setting name="FileServiceProxy_ASMXproxy_FileService" serializeAs="String">
            <value>http://localhost/TRIMBrokerService/FileService.asmx</value>
        </setting>
    </FileServiceProxy.Properties.Settings>
</applicationSettings>

简而言之,当我需要将我的Web应用程序发布到另一台服务器时,我必须更改代理类中的Web引用并重新构建它。然后,当我想在我的localhost上调试它时,我必须将web引用更改回localhost(如上所述)。

理想情况下,我想在我的Web应用程序演示项目中公开某种选择(例如单选按钮或用于在运行时更改URL的文本框),这样我就可以对所需的FileServiceProxy进行“后期绑定”排序.dll将在运行时使用。其他人已经草拟了提案"using config files",但我仍然坚持如何做到这一点。在我看来,我将不得不有一个额外的项目,因此另一个DLL - 也许FileServiceProxyPROD.dll - 但这似乎很尴尬,即便如此,我不知道还有什么我必须做。

1 个答案:

答案 0 :(得分:2)

实际上,您可以使用相同的参考。只需更改代理实例的Url属性:

using (var svc = new WebServiceProxy())
{
    svc.Url = realUrl;
    var result = svc.ServiceMethod();
}