Skip to content

Commit

Permalink
Add new WCF package version support and not generate CloseAsync() in … (
Browse files Browse the repository at this point in the history
#4909)

* Add new WCF package version support and not generate CloseAsync() in verison above 4.10.
  • Loading branch information
imcarolwang authored Sep 22, 2022
1 parent 53c2589 commit 41dfb82
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,51 @@
using Microsoft.CodeDom;
using System.ServiceModel;
using System.Threading.Tasks;
using System.Linq;

namespace Microsoft.Tools.ServiceModel.Svcutil
{
internal class AddAsyncOpenClose : ClientClassVisitor
{
private bool _generateCloseAsync = false;

public AddAsyncOpenClose(CommandProcessorOptions options)
{
if (options.TargetFramework.IsDnx)
{
if (TargetFrameworkHelper.NetCoreVersionReferenceTable.TryGetValue(options.TargetFramework.Version, out var referenceTable))
{
string version = referenceTable.FirstOrDefault().Version;
string[] vers = version.Split('.');
if (vers.Length > 1)
{
Version v = new Version(int.Parse(vers[0]), int.Parse(vers[1]));
// For .NETCore targetframework found in the referenced table, generate CloseAsync() when WCF package version is less than 4.10
if (v.CompareTo(new Version(4, 10)) < 0)
{
_generateCloseAsync = true;
}
}
}
}
else
{
// For supported non-Dnx target frameworks (eg: net472, net48), generate CloseAsync() as before
_generateCloseAsync = true;
}
}

protected override void VisitClientClass(CodeTypeDeclaration type)
{
base.VisitClientClass(type);

using (NameScope nameScope = new CodeTypeNameScope(type))
{
type.Members.Add(GenerateTaskBasedAsyncMethod("Open", nameScope));
type.Members.Add(GenerateTaskBasedAsyncMethod("Close", nameScope));
if(_generateCloseAsync)
{
type.Members.Add(GenerateTaskBasedAsyncMethod("Close", nameScope));
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/dotnet-svcutil/lib/src/CodeDomFixup/VisitorFixup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ private static CodeDomVisitor[] GetVisitors(ServiceContractGenerator generator,
new SpecialIXmlSerializableRemapper(arrayOfXElementTypeHelper),
new EnsureAdditionalAssemblyReference(),
new CreateCallbackImpl((generator.Options & ServiceContractGenerationOptions.TaskBasedAsynchronousMethod) == ServiceContractGenerationOptions.TaskBasedAsynchronousMethod, generator),
new AddAsyncOpenClose(), // this one need to run after CreateCallbakImpl which provide name of VerifyCallbackEvents method
new AddAsyncOpenClose(options), // this one need to run after CreateCallbakImpl which provide name of VerifyCallbackEvents method
};

if (options.Sync != true)
Expand Down
10 changes: 5 additions & 5 deletions src/dotnet-svcutil/lib/src/Shared/TargetFrameworkHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,11 @@ internal class TargetFrameworkHelper
ProjectDependency.FromPackage("System.ServiceModel.Federation", "4.8.*")
} },
{new Version("6.0"), new List<ProjectDependency> {
ProjectDependency.FromPackage("System.ServiceModel.Duplex", "4.9.*" ),
ProjectDependency.FromPackage("System.ServiceModel.Http", "4.9.*" ),
ProjectDependency.FromPackage("System.ServiceModel.NetTcp", "4.9.*" ),
ProjectDependency.FromPackage("System.ServiceModel.Security", "4.9.*"),
ProjectDependency.FromPackage("System.ServiceModel.Federation", "4.9.*")
ProjectDependency.FromPackage("System.ServiceModel.Duplex", "4.10.*" ),
ProjectDependency.FromPackage("System.ServiceModel.Http", "4.10.*" ),
ProjectDependency.FromPackage("System.ServiceModel.NetTcp", "4.10.*" ),
ProjectDependency.FromPackage("System.ServiceModel.Security", "4.10.*"),
ProjectDependency.FromPackage("System.ServiceModel.Federation", "4.10.*")
} }
};

Expand Down

0 comments on commit 41dfb82

Please sign in to comment.