diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index 959dfe4888..bcedbeeb4f 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -60,6 +60,9 @@
+
+ 3.0
+
3.0
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceCodeDomBuilder.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceCodeDomBuilder.cs
index e62d7e24de..11d853cc4c 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceCodeDomBuilder.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceCodeDomBuilder.cs
@@ -9,7 +9,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface IServiceReferenceCodeDomBuilder
{
+ string Namespace { get; set; }
CodeCompileUnit GenerateCompileUnit(MetadataSet metadata);
-
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomBuilder.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomBuilder.cs
index db3b3f727d..c7b2bf89af 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomBuilder.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomBuilder.cs
@@ -3,17 +3,25 @@
using System;
using System.CodeDom;
+using System.Runtime.Serialization;
+using System.ServiceModel.Channels;
using System.ServiceModel.Description;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class ServiceReferenceCodeDomBuilder : IServiceReferenceCodeDomBuilder
{
+ public ServiceReferenceCodeDomBuilder()
+ {
+ this.Namespace = String.Empty;
+ }
+
+ public string Namespace { get; set; }
+
public CodeCompileUnit GenerateCompileUnit(MetadataSet metadata)
{
- var importer = new WsdlImporter(metadata);
- var contractGenerator = new ServiceContractGenerator();
- contractGenerator.Options = ServiceContractGenerationOptions.ClientClass;
+ ServiceContractGenerator contractGenerator = CreateServiceContractGenerator();
+ WsdlImporter importer = CreateWsdlImporter(metadata);
foreach (ContractDescription contract in importer.ImportAllContracts()) {
contractGenerator.GenerateServiceContractType(contract);
@@ -21,5 +29,25 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
return contractGenerator.TargetCompileUnit;
}
+
+ WsdlImporter CreateWsdlImporter(MetadataSet metadata)
+ {
+ var importer = new WsdlImporter(metadata);
+ var contractImporter = new XsdDataContractImporter();
+ contractImporter.Options = new ImportOptions();
+ contractImporter.Options.Namespaces.Add("*", Namespace);
+ importer.State.Add(typeof(XsdDataContractImporter), contractImporter);
+ return importer;
+ }
+
+ ServiceContractGenerator CreateServiceContractGenerator()
+ {
+ var contractGenerator = new ServiceContractGenerator();
+ contractGenerator.Options =
+ ServiceContractGenerationOptions.ClientClass |
+ ServiceContractGenerationOptions.ChannelInterface;
+ contractGenerator.NamespaceMappings.Add("*", Namespace);
+ return contractGenerator;
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
index 07b30a0d75..16cbad416a 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
@@ -52,6 +52,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
ServiceReferenceFileName referenceFileName = project.GetServiceReferenceFileName(Namespace);
CreateFolderForFileIfFolderMissing(referenceFileName.Path);
+ fileGenerator.ServiceReferenceNamespace = Namespace;
fileGenerator.GenerateProxyFile(metadata, referenceFileName.Path);
ServiceReferenceMapFileName mapFileName = project.GetServiceReferenceMapFileName(Namespace);
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs
index bc1e405b51..13df4ba05e 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs
@@ -26,7 +26,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
this.codeDomBuilder = codeDomBuilder;
}
- public string ServiceReferenceNamespace { get; set; }
+ public string ServiceReferenceNamespace {
+ get { return codeDomBuilder.Namespace; }
+ set { codeDomBuilder.Namespace = value; }
+ }
public void GenerateProxyFile(MetadataSet metadata, string proxyFileName)
{
diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
index 10be3a2bb1..d81ce68960 100644
--- a/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
+++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
@@ -188,5 +188,19 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
generator.AddServiceReference(metadata);
}
+
+ [Test]
+ public void AddServiceReference_GeneratesServiceReference_NamespaceSetOnProxyGenerator()
+ {
+ CreateGenerator();
+ AddProxyFileNameForServiceName("MyServiceRef");
+ ServiceReferenceMapFileName expectedMapFileName =
+ AddMapFileNameForServiceName(@"d:\projects\MyProject\Service References", "MyServiceRef");
+ generator.Namespace = "MyServiceRef";
+
+ generator.AddServiceReference(metadata);
+
+ Assert.AreEqual("MyServiceRef", fakeProxyGenerator.ServiceReferenceNamespace);
+ }
}
}
diff --git a/src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs b/src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs
index c44305f56e..0201a7ce68 100644
--- a/src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs
+++ b/src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs
@@ -48,5 +48,17 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
fakeCodeDomProvider.AssertWasCalled(p => p.GenerateCodeFromCompileUnit(compileUnit, expectedProxyFileName));
}
+
+ [Test]
+ public void GenerateProxyFile_ProxyToBeGeneratedForMetadata_NamespaceUsedWhenGeneratingCodeDom()
+ {
+ CreateProxyGenerator();
+ CreateCompileUnitToReturnFromCodeDomBuilder(metadata);
+ proxyGenerator.ServiceReferenceNamespace = "Test";
+
+ proxyGenerator.GenerateProxyFile(metadata, "Reference.cs");
+
+ Assert.AreEqual("Test", fakeCodeDomBuilder.Namespace);
+ }
}
}