通过命令行更新动态Web引用(wsdl工具)

时间:2013-03-20 09:37:14

标签: c# web-services web-reference wsdl.exe


我使用WSDL.exe工具更新动态Web引用时遇到问题。

当我在VS中使用“更新Web引用”时,一切都按预期工作。 下面是生成的代码(Reference.cs文件的一部分):

    public MyService() {
        this.Url = global::ServerReference.Properties.Settings.Default.ServerReference_Reference_MyService;
        if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
            this.UseDefaultCredentials = true;
            this.useDefaultCredentialsSetExplicitly = false;
        }
        else {
            this.useDefaultCredentialsSetExplicitly = true;
        }
    }

我从应用程序属性中获取必要的信息,然后将其存储在配置文件中,因此可以在不重建应用程序的情况下进行更改。

但是当我使用以下命令时:

.\tools\wsdl.exe /l:cs /n:ServerReference /o".\ServerReference\Web References\Reference\Reference.cs" http://localhost:52956/MyService/MyService.asmx

它是在Reference.cs文件中使用固定的URL地址创建的。

是否有人知道如何更改命令以实现与Visual Studio中相同的 Reference.cs 文件?

1 个答案:

答案 0 :(得分:1)

我认为你不能用wsdl.exe生成相同的代码。 但是,如果您想要实现的主要功能是生成从app.config获取服务地址的代码,那么您可以将wsdl.exe与“/ appsettingurlkey”开关一起使用。

您将获得的代码如下:

public WebService1() {
    string urlSetting = System.Configuration.ConfigurationManager.AppSettings["ConfigKeyForServiceUrl"];
    if ((urlSetting != null)) {
        this.Url = urlSetting;
    }
    else {
        this.Url = "http://localhost:65304/WebService1.asmx";
    }
}

请注意,它从'appSettings'读取而不是从'applicationSettings'通过Settings类读取,因此您必须修改app.config。它也不包含'UseDefaultCredentials'的内容。