Code proxy de service Web généré par wsdl.exe versus «Mettre à jour la référence Web» - Dois-je m'en soucier?

StackOverflow https://stackoverflow.com/questions/8949945

Question

En utilisant Visual Studio 2010, nous avons une solution avec plusieurs sites Web (pas des projets d'application Web) et des projets de ligne de commande et WinForms. Tous les cibles .NET 2.0. De nombreux projets ont des références Web aux services Web ASMX sur les sites Web.

Les services Web changent fréquemment, donc lorsque nous compilons tout, nous devons suivre manuellement tous les projets et mettre à jour les références de service Web. J'ai maintenant réussi à automatiser cette disco.exe et wsdl.exe. Mais je suis préoccupé par les différences de code générées par WSDL.exe et une mise à jour manuelle de la référence Web dans Vs.

wsdl.exe génère du code comme ceci:

public WebServiceName() {
    string urlSetting = System.Configuration.ConfigurationManager.AppSettings["WebServiceName"];
    if ((urlSetting != null)) {
        this.Url = urlSetting;
    }
    else {
        this.Url = "http://example/webservicename.asmx";
    }
}

Tandis que VS génère du code comme ceci:

private bool useDefaultCredentialsSetExplicitly;

public WebServiceName() {
    this.Url = global::ProjectName.Properties.Settings.Default.ProjectName_WebServiceNameWebService_WebServiceName;
    if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
        this.UseDefaultCredentials = true;
        this.useDefaultCredentialsSetExplicitly = false;
    }
    else {
        this.useDefaultCredentialsSetExplicitly = true;
    }
}

public new string Url {
    get {
        return base.Url;
    }
    set {
        if ((((this.IsLocalFileSystemWebService(base.Url) == true) 
                    && (this.useDefaultCredentialsSetExplicitly == false)) 
                    && (this.IsLocalFileSystemWebService(value) == false))) {
            base.UseDefaultCredentials = false;
        }
        base.Url = value;
    }
}

public new bool UseDefaultCredentials {
    get {
        return base.UseDefaultCredentials;
    }
    set {
        base.UseDefaultCredentials = value;
        this.useDefaultCredentialsSetExplicitly = true;
    }
}

private bool IsLocalFileSystemWebService(string url) {
    if (((url == null) 
                || (url == string.Empty))) {
        return false;
    }
    System.Uri wsUri = new System.Uri(url);
    if (((wsUri.Port >= 1024) 
                && (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
        return true;
    }
    return false;
}

Tout le reste est fondamentalement le même. Dois-je m'inquiéter à ce sujet? Cela signifie certainement que nous devions modifier la façon dont les URL de remplacement sont stockées dans les fichiers app.config et web.config. WSDL.EXE utilise AppSettings, VS utilise des configUSECTIONS / applications.

PS: Je sais que ASMX est ancien et WCF est nouveau. Je suis coincé avec ça.

Mise à jour: a trouvé cet article qui parle de la différence:

Comment partager les URL dynamiques sur plusieurs projets d'applications Web

http://weblogs.asp.net/bradleyb/archive/2006/05/04/445133.aspx

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top