From 419ad6f45630c04a4c2d34ec1c48e0f664bc7d20 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 14 Apr 2012 15:16:34 +0100 Subject: [PATCH] Fix unhandled exception when using invalid url in Add Service Reference dialog. --- .../AddServiceReferenceViewModel.cs | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs index 8da3b889a1..2ce1814fd7 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs @@ -58,24 +58,35 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference this.assemblyReferences = serviceGenerator.GetCheckableAssemblyReferences().ToList(); HeadLine = header; - GoCommand = new RelayCommand(ExecuteGo, CanExecuteGo); + GoCommand = new RelayCommand(DiscoveryServices, CanExecuteGo); AdvancedDialogCommand = new RelayCommand(ExecuteAdvancedDialogCommand, CanExecuteAdvancedDialogCommand); TwoValues = new ObservableCollection(); } - #region Go Command - public ICommand GoCommand { get; private set; } - void ExecuteGo() + void DiscoveryServices() + { + Uri uri = TryGetUri(SelectedService); + if (uri != null) { + ServiceDescriptionMessage = waitMessage; + StartDiscovery(uri, new DiscoveryNetworkCredential(CredentialCache.DefaultNetworkCredentials, DiscoveryNetworkCredential.DefaultAuthenticationType)); + } + } + + Uri TryGetUri(string url) { - if (String.IsNullOrEmpty(SelectedService)) { - MessageBox.Show(noUrl); - return; + if (String.IsNullOrEmpty(url)) { + ServiceDescriptionMessage = noUrl; + return null; + } + + try { + return new Uri(url); + } catch (Exception ex) { + ServiceDescriptionMessage = ex.Message; } - ServiceDescriptionMessage = waitMessage; - Uri uri = new Uri(SelectedService); - StartDiscovery(uri, new DiscoveryNetworkCredential(CredentialCache.DefaultNetworkCredentials, DiscoveryNetworkCredential.DefaultAuthenticationType)); + return null; } bool CanExecuteGo() @@ -83,10 +94,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference return true; } - #endregion - - #region AdvancedDialogCommand - public ICommand AdvancedDialogCommand { get; private set; } bool CanExecuteAdvancedDialogCommand() @@ -105,11 +112,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference serviceGenerator.UpdateAssemblyReferences(assemblyReferences); } } - - #endregion - #region discover service Code from Matt - void StartDiscovery(Uri uri, DiscoveryNetworkCredential credential) { // Abort previous discovery. @@ -233,8 +236,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference return String.Empty; } - #endregion - public string Title { get { return title; } @@ -348,10 +349,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference public void AddServiceReference() { CompilerMessageView.Instance.BringToFront(); - serviceGenerator.Options.Namespace = defaultNameSpace; - serviceGenerator.Options.Url = discoveryUri.ToString(); - serviceGenerator.AddServiceReference(); - new RefreshProjectBrowser().Run(); + + try { + serviceGenerator.Options.Namespace = defaultNameSpace; + serviceGenerator.Options.Url = discoveryUri.ToString(); + serviceGenerator.AddServiceReference(); + new RefreshProjectBrowser().Run(); + } catch (Exception ex) { + ICSharpCode.Core.LoggingService.Error("Failed to add service reference.", ex); + } } }