From 23271eacab2dd9a06c3d6c38e57c157e034062c8 Mon Sep 17 00:00:00 2001 From: Abdelwahab Afifi Date: Sat, 17 Sep 2022 06:41:27 +0200 Subject: [PATCH] update code convert to top level-statement app and add license Add BasicHttpBinding Transport Security Sample - IIS/Kestrel Hosted Updates: 1. Remove CS folder in folder heirarchy 2. Rename .sln file to Binding.Basic.Http.sln 3. Remove .config folder (validate this doesn't break the build) Update Client Connected Service URL Update LaunchSettings and remove .UseIIS (WebHost default) Update Client NuGet Packages Update NuGet pPackages Add BasicHttpBinding Sample - IIS Hosted --- .../Binding.Basic.TransportSecurity.sln | 31 +++ .../TransportSecurity/Client/Client.csproj | 18 ++ .../ConnectedService.json | 17 ++ .../Reference.cs | 184 ++++++++++++++++++ .../Basic/TransportSecurity/Client/Program.cs | 38 ++++ .../Service/CalculatorService.cs | 29 +++ .../Service/ICalculatorService.cs | 19 ++ .../TransportSecurity/Service/Program.cs | 25 +++ .../PublishProfiles/IISProfile.pubxml | 27 +++ .../Service/Properties/launchSettings.json | 28 +++ .../TransportSecurity/Service/Service.csproj | 21 ++ .../Service/appsettings.Development.json | 8 + .../Service/appsettings.json | 9 + 13 files changed, 454 insertions(+) create mode 100644 Basic/Binding/Basic/TransportSecurity/Binding.Basic.TransportSecurity.sln create mode 100644 Basic/Binding/Basic/TransportSecurity/Client/Client.csproj create mode 100644 Basic/Binding/Basic/TransportSecurity/Client/Connected Services/CoreWcf.Samples.TransportSecurity/ConnectedService.json create mode 100644 Basic/Binding/Basic/TransportSecurity/Client/Connected Services/CoreWcf.Samples.TransportSecurity/Reference.cs create mode 100644 Basic/Binding/Basic/TransportSecurity/Client/Program.cs create mode 100644 Basic/Binding/Basic/TransportSecurity/Service/CalculatorService.cs create mode 100644 Basic/Binding/Basic/TransportSecurity/Service/ICalculatorService.cs create mode 100644 Basic/Binding/Basic/TransportSecurity/Service/Program.cs create mode 100644 Basic/Binding/Basic/TransportSecurity/Service/Properties/PublishProfiles/IISProfile.pubxml create mode 100644 Basic/Binding/Basic/TransportSecurity/Service/Properties/launchSettings.json create mode 100644 Basic/Binding/Basic/TransportSecurity/Service/Service.csproj create mode 100644 Basic/Binding/Basic/TransportSecurity/Service/appsettings.Development.json create mode 100644 Basic/Binding/Basic/TransportSecurity/Service/appsettings.json diff --git a/Basic/Binding/Basic/TransportSecurity/Binding.Basic.TransportSecurity.sln b/Basic/Binding/Basic/TransportSecurity/Binding.Basic.TransportSecurity.sln new file mode 100644 index 0000000..359b903 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Binding.Basic.TransportSecurity.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32422.2 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Service", "Service\Service.csproj", "{BF126326-3393-407C-B24A-8FCCC388BE27}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "Client\Client.csproj", "{B533CADA-93BB-40E1-8FBA-FE37100062C3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {BF126326-3393-407C-B24A-8FCCC388BE27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF126326-3393-407C-B24A-8FCCC388BE27}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF126326-3393-407C-B24A-8FCCC388BE27}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF126326-3393-407C-B24A-8FCCC388BE27}.Release|Any CPU.Build.0 = Release|Any CPU + {B533CADA-93BB-40E1-8FBA-FE37100062C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B533CADA-93BB-40E1-8FBA-FE37100062C3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B533CADA-93BB-40E1-8FBA-FE37100062C3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B533CADA-93BB-40E1-8FBA-FE37100062C3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AD996EFD-70DC-4431-B411-5A2771DD02D3} + EndGlobalSection +EndGlobal diff --git a/Basic/Binding/Basic/TransportSecurity/Client/Client.csproj b/Basic/Binding/Basic/TransportSecurity/Client/Client.csproj new file mode 100644 index 0000000..9f7c882 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Client/Client.csproj @@ -0,0 +1,18 @@ + + + + Exe + net6.0 + enable + enable + + + + + + + + + + + diff --git a/Basic/Binding/Basic/TransportSecurity/Client/Connected Services/CoreWcf.Samples.TransportSecurity/ConnectedService.json b/Basic/Binding/Basic/TransportSecurity/Client/Connected Services/CoreWcf.Samples.TransportSecurity/ConnectedService.json new file mode 100644 index 0000000..9948016 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Client/Connected Services/CoreWcf.Samples.TransportSecurity/ConnectedService.json @@ -0,0 +1,17 @@ +{ + "ExtendedData": { + "inputs": [ + "https://localhost/CoreWcfSamples/basicHttpTransportSecurity?singleWsdl" + ], + "collectionTypes": [ + "System.Array", + "System.Collections.Generic.Dictionary`2" + ], + "namespaceMappings": [ + "*, CoreWcf.Samples.TransportSecurity" + ], + "sync": true, + "targetFramework": "net6.0", + "typeReuseMode": "All" + } +} \ No newline at end of file diff --git a/Basic/Binding/Basic/TransportSecurity/Client/Connected Services/CoreWcf.Samples.TransportSecurity/Reference.cs b/Basic/Binding/Basic/TransportSecurity/Client/Connected Services/CoreWcf.Samples.TransportSecurity/Reference.cs new file mode 100644 index 0000000..c6f61cb --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Client/Connected Services/CoreWcf.Samples.TransportSecurity/Reference.cs @@ -0,0 +1,184 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CoreWcf.Samples.TransportSecurity +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")] + [System.ServiceModel.ServiceContractAttribute(ConfigurationName="CoreWcf.Samples.TransportSecurity.ICalculatorService")] + public interface ICalculatorService + { + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculatorService/Add", ReplyAction="http://tempuri.org/ICalculatorService/AddResponse")] + double Add(double n1, double n2); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculatorService/Add", ReplyAction="http://tempuri.org/ICalculatorService/AddResponse")] + System.Threading.Tasks.Task AddAsync(double n1, double n2); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculatorService/Subtract", ReplyAction="http://tempuri.org/ICalculatorService/SubtractResponse")] + double Subtract(double n1, double n2); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculatorService/Subtract", ReplyAction="http://tempuri.org/ICalculatorService/SubtractResponse")] + System.Threading.Tasks.Task SubtractAsync(double n1, double n2); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculatorService/Multiply", ReplyAction="http://tempuri.org/ICalculatorService/MultiplyResponse")] + double Multiply(double n1, double n2); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculatorService/Multiply", ReplyAction="http://tempuri.org/ICalculatorService/MultiplyResponse")] + System.Threading.Tasks.Task MultiplyAsync(double n1, double n2); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculatorService/Divide", ReplyAction="http://tempuri.org/ICalculatorService/DivideResponse")] + double Divide(double n1, double n2); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICalculatorService/Divide", ReplyAction="http://tempuri.org/ICalculatorService/DivideResponse")] + System.Threading.Tasks.Task DivideAsync(double n1, double n2); + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")] + public interface ICalculatorServiceChannel : CoreWcf.Samples.TransportSecurity.ICalculatorService, System.ServiceModel.IClientChannel + { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.3")] + public partial class CalculatorServiceClient : System.ServiceModel.ClientBase, CoreWcf.Samples.TransportSecurity.ICalculatorService + { + + /// + /// Implement this partial method to configure the service endpoint. + /// + /// The endpoint to configure + /// The client credentials + static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials); + + public CalculatorServiceClient() : + base(CalculatorServiceClient.GetDefaultBinding(), CalculatorServiceClient.GetDefaultEndpointAddress()) + { + this.Endpoint.Name = EndpointConfiguration.BasicHttpBinding_ICalculatorService.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); + } + + public CalculatorServiceClient(EndpointConfiguration endpointConfiguration) : + base(CalculatorServiceClient.GetBindingForEndpoint(endpointConfiguration), CalculatorServiceClient.GetEndpointAddress(endpointConfiguration)) + { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); + } + + public CalculatorServiceClient(EndpointConfiguration endpointConfiguration, string remoteAddress) : + base(CalculatorServiceClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress)) + { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); + } + + public CalculatorServiceClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : + base(CalculatorServiceClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress) + { + this.Endpoint.Name = endpointConfiguration.ToString(); + ConfigureEndpoint(this.Endpoint, this.ClientCredentials); + } + + public CalculatorServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) + { + } + + public double Add(double n1, double n2) + { + return base.Channel.Add(n1, n2); + } + + public System.Threading.Tasks.Task AddAsync(double n1, double n2) + { + return base.Channel.AddAsync(n1, n2); + } + + public double Subtract(double n1, double n2) + { + return base.Channel.Subtract(n1, n2); + } + + public System.Threading.Tasks.Task SubtractAsync(double n1, double n2) + { + return base.Channel.SubtractAsync(n1, n2); + } + + public double Multiply(double n1, double n2) + { + return base.Channel.Multiply(n1, n2); + } + + public System.Threading.Tasks.Task MultiplyAsync(double n1, double n2) + { + return base.Channel.MultiplyAsync(n1, n2); + } + + public double Divide(double n1, double n2) + { + return base.Channel.Divide(n1, n2); + } + + public System.Threading.Tasks.Task DivideAsync(double n1, double n2) + { + return base.Channel.DivideAsync(n1, n2); + } + + public virtual System.Threading.Tasks.Task OpenAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndOpen)); + } + + public virtual System.Threading.Tasks.Task CloseAsync() + { + return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action(((System.ServiceModel.ICommunicationObject)(this)).EndClose)); + } + + private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_ICalculatorService)) + { + System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding(); + result.MaxBufferSize = int.MaxValue; + result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max; + result.MaxReceivedMessageSize = int.MaxValue; + result.AllowCookies = true; + result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport; + return result; + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration) + { + if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_ICalculatorService)) + { + return new System.ServiceModel.EndpointAddress("https://localhost/CoreWcfSamples/basicHttpTransportSecurity/CalculatorService/basicHttpTransportSecurity"); + } + throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration)); + } + + private static System.ServiceModel.Channels.Binding GetDefaultBinding() + { + return CalculatorServiceClient.GetBindingForEndpoint(EndpointConfiguration.BasicHttpBinding_ICalculatorService); + } + + private static System.ServiceModel.EndpointAddress GetDefaultEndpointAddress() + { + return CalculatorServiceClient.GetEndpointAddress(EndpointConfiguration.BasicHttpBinding_ICalculatorService); + } + + public enum EndpointConfiguration + { + + BasicHttpBinding_ICalculatorService, + } + } +} diff --git a/Basic/Binding/Basic/TransportSecurity/Client/Program.cs b/Basic/Binding/Basic/TransportSecurity/Client/Program.cs new file mode 100644 index 0000000..1023cb1 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Client/Program.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +//The service contract is defined using Connected Service "WCF Web Service", generated from the service by the dotnet svcutil tool. + +//Client implementation code. +CalculatorServiceClient client = new CalculatorServiceClient(); + +// Call the Add service operation. +double value1 = 100.00D; +double value2 = 15.99D; +double result = client.Add(value1, value2); +Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result); + +// Call the Subtract service operation. +value1 = 145.00D; +value2 = 76.54D; +result = client.Subtract(value1, value2); +Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result); + +// Call the Multiply service operation. +value1 = 9.00D; +value2 = 81.25D; +result = client.Multiply(value1, value2); +Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result); + +// Call the Divide service operation. +value1 = 22.00D; +value2 = 7.00D; +result = client.Divide(value1, value2); +Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result); + +//Closing the client gracefully closes the connection and cleans up resources +client.CloseAsync(); + +Console.WriteLine(); +Console.WriteLine("Press to terminate client."); +Console.ReadLine(); diff --git a/Basic/Binding/Basic/TransportSecurity/Service/CalculatorService.cs b/Basic/Binding/Basic/TransportSecurity/Service/CalculatorService.cs new file mode 100644 index 0000000..f5c707d --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Service/CalculatorService.cs @@ -0,0 +1,29 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace CoreWcf.Samples.TransportSecurity +{ + // Service class which implements the service contract interface. + public class CalculatorService : ICalculatorService + { + public double Add(double n1, double n2) + { + return n1 + n2; + } + + public double Subtract(double n1, double n2) + { + return n1 - n2; + } + + public double Multiply(double n1, double n2) + { + return n1 * n2; + } + + public double Divide(double n1, double n2) + { + return n1 / n2; + } + } +} diff --git a/Basic/Binding/Basic/TransportSecurity/Service/ICalculatorService.cs b/Basic/Binding/Basic/TransportSecurity/Service/ICalculatorService.cs new file mode 100644 index 0000000..0c9db84 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Service/ICalculatorService.cs @@ -0,0 +1,19 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace CoreWcf.Samples.TransportSecurity +{ + // Define a service contract. + [ServiceContract] + public interface ICalculatorService + { + [OperationContract] + double Add(double n1, double n2); + [OperationContract] + double Subtract(double n1, double n2); + [OperationContract] + double Multiply(double n1, double n2); + [OperationContract] + double Divide(double n1, double n2); + } +} diff --git a/Basic/Binding/Basic/TransportSecurity/Service/Program.cs b/Basic/Binding/Basic/TransportSecurity/Service/Program.cs new file mode 100644 index 0000000..3cf0d96 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Service/Program.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +var builder = WebApplication.CreateBuilder(); + +//Enable CoreWCF Services, with metadata (WSDL) support +builder.Services.AddServiceModelServices() + .AddServiceModelMetadata() + .AddSingleton(); + +var app = builder.Build(); + +app.UseServiceModel(builder => +{ + // Add the Calculator Service + builder.AddService(serviceOptions => { }) + // Add BasicHttpBinding endpoint + .AddServiceEndpoint(new BasicHttpBinding(CoreWCF.Channels.BasicHttpSecurityMode.Transport), "CalculatorService/basicHttpTransportSecurity"); + + // Configure WSDL to be available + var serviceMetadataBehavior = app.Services.GetRequiredService(); + serviceMetadataBehavior.HttpsGetEnabled = true; +}); + +app.Run(); diff --git a/Basic/Binding/Basic/TransportSecurity/Service/Properties/PublishProfiles/IISProfile.pubxml b/Basic/Binding/Basic/TransportSecurity/Service/Properties/PublishProfiles/IISProfile.pubxml new file mode 100644 index 0000000..fa5bd3e --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Service/Properties/PublishProfiles/IISProfile.pubxml @@ -0,0 +1,27 @@ + + + + + MSDeploy + true + Release + Any CPU + https://localhost/CoreWcfSamples/basicHttpTransportSecurity + false + bf126326-3393-407c-b24a-8fccc388be27 + false + localhost + Default Web Site/CoreWcfSamples/basicHttpTransportSecurity + + true + InProc + false + true + + <_SavePWD>false + net6.0 + + \ No newline at end of file diff --git a/Basic/Binding/Basic/TransportSecurity/Service/Properties/launchSettings.json b/Basic/Binding/Basic/TransportSecurity/Service/Properties/launchSettings.json new file mode 100644 index 0000000..e3b48e2 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Service/Properties/launchSettings.json @@ -0,0 +1,28 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:57035/CalculatorService/basicHttpTransportSecurity", + "sslPort": 44315 + } + }, + "profiles": { + "Service": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "https://localhost:5001/CalculatorService/basicHttpTransportSecurity", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/Basic/Binding/Basic/TransportSecurity/Service/Service.csproj b/Basic/Binding/Basic/TransportSecurity/Service/Service.csproj new file mode 100644 index 0000000..4e6f331 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Service/Service.csproj @@ -0,0 +1,21 @@ + + + + net6.0 + enable + true + InProcess + + + + + + + + + + + + + + diff --git a/Basic/Binding/Basic/TransportSecurity/Service/appsettings.Development.json b/Basic/Binding/Basic/TransportSecurity/Service/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Service/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/Basic/Binding/Basic/TransportSecurity/Service/appsettings.json b/Basic/Binding/Basic/TransportSecurity/Service/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/Basic/Binding/Basic/TransportSecurity/Service/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +}