Browse Source

Generate WCF service reference proxy using the namespace in the Add Service Reference dialog.

pull/18/head
Matt Ward 14 years ago
parent
commit
39891c3b4b
  1. 3
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  2. 2
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceCodeDomBuilder.cs
  3. 34
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomBuilder.cs
  4. 1
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs
  5. 5
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs
  6. 14
      src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs
  7. 12
      src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs

3
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -60,6 +60,9 @@ @@ -60,6 +60,9 @@
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="System.Runtime.Serialization">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="System.ServiceModel">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>

2
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/IServiceReferenceCodeDomBuilder.cs

@ -9,7 +9,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -9,7 +9,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface IServiceReferenceCodeDomBuilder
{
string Namespace { get; set; }
CodeCompileUnit GenerateCompileUnit(MetadataSet metadata);
}
}

34
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceCodeDomBuilder.cs

@ -3,17 +3,25 @@ @@ -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 @@ -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;
}
}
}

1
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceGenerator.cs

@ -52,6 +52,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -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);

5
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ServiceReferenceProxyGenerator.cs

@ -26,7 +26,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -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)
{

14
src/Main/Base/Test/ServiceReferences/ServiceReferenceGeneratorTests.cs

@ -188,5 +188,19 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -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);
}
}
}

12
src/Main/Base/Test/ServiceReferences/ServiceReferenceProxyGeneratorTests.cs

@ -48,5 +48,17 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences @@ -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);
}
}
}

Loading…
Cancel
Save