Codice proxy del servizio Web generato da wsdl.exe rispetto a "Aggiorna il riferimento Web" - Dovrei preoccuparmi?
-
11-11-2019 - |
Domanda
Utilizzando Visual Studio 2010, abbiamo una soluzione con diversi siti Web (non progetti di applicazioni Web) e progetti di riga di comando e Winforms. Tutti i target .NET 2.0. Molti dei progetti hanno riferimenti Web ai servizi Web ASMX nei siti Web.
I servizi Web cambiano frequentemente, quindi quando compiliamo tutto, dobbiamo passare manualmente tutti i progetti e aggiornare i riferimenti al servizio Web. Ora sono riuscito ad automatizzarlo usando disco.exe e wsdl.exe. Ma sono preoccupato per le differenze nel codice generato da wsdl.exe e un aggiornamento manuale del riferimento Web in vs.
wsdl.exe genera codice come questo:
public WebServiceName() {
string urlSetting = System.Configuration.ConfigurationManager.AppSettings["WebServiceName"];
if ((urlSetting != null)) {
this.Url = urlSetting;
}
else {
this.Url = "http://example/webservicename.asmx";
}
}
Mentre VS genera codice come questo:
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;
}
Tutto il resto è fondamentalmente lo stesso. Devo preoccuparmi di questo? Significa certamente che dovremmo cambiare il modo in cui gli URL di override sono archiviati nei file App.config e web.config. WSDL.EXE utilizza AppSettings, VS utilizza configurazioni/applicazioni.
PS: so che ASMX è vecchio e WCF è nuovo. Sono bloccato con questo.
Aggiornamento: ha trovato questo articolo che parla della differenza:
Come condividere URL dinamici su più progetti di applicazioni Web
http://weblogs.asp.net/bradleyb/archive/2006/05/04/445133.aspx
Nessuna soluzione corretta