diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_Basic/EchoService.cs b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/EchoService.cs new file mode 100644 index 0000000..57085e0 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/EchoService.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace RabbitMQ_Basic; + +public class EchoService : IEchoService +{ + public string Echo(string text) + { + System.Console.WriteLine($"Received {text} from client!"); + return text; + } + + public string ComplexEcho(EchoMessage text) + { + System.Console.WriteLine($"Received {text.Text} from client!"); + return text.Text; + } + + public string FailEcho(string text) + => throw new FaultException(new EchoFault() { Text = "WCF Fault OK" }, new FaultReason("FailReason")); +} diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_Basic/IEchoService.cs b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/IEchoService.cs new file mode 100644 index 0000000..6736120 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/IEchoService.cs @@ -0,0 +1,34 @@ +using System.Diagnostics.CodeAnalysis; + +namespace RabbitMQ_Basic +{ + [DataContract] + public class EchoFault + { + [DataMember] + [AllowNull] + public string Text { get; set; } + } + + [ServiceContract] + public interface IEchoService + { + [OperationContract] + string Echo(string text); + + [OperationContract] + string ComplexEcho(EchoMessage text); + + [OperationContract] + [FaultContract(typeof(EchoFault))] + string FailEcho(string text); + } + + [DataContract] + public class EchoMessage + { + [AllowNull] + [DataMember] + public string Text { get; set; } + } +} diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_Basic/Program.cs b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/Program.cs new file mode 100644 index 0000000..5cf320b --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/Program.cs @@ -0,0 +1,27 @@ +using System.Net; + +var builder = WebApplication.CreateBuilder(); +builder.Services.AddServiceModelServices(); +builder.Services.AddQueueTransport(); +builder.Services.AddServiceModelMetadata(); +builder.Services.AddSingleton(); + +var app = builder.Build(); +var rabbitMqHostUri = new Uri("net.amqp://HOST:PORT/amq.direct/QUEUE_NAME#ROUTING_KEY"); +var credentials = new NetworkCredential(ConnectionFactory.DefaultUser, ConnectionFactory.DefaultPass); + +app.UseServiceModel(serviceBuilder => +{ + serviceBuilder.AddService(); + serviceBuilder.AddServiceEndpoint( + new RabbitMqBinding + { + Credentials = credentials, + QueueConfiguration = new QuorumQueueConfiguration() + }, + rabbitMqHostUri); + var serviceMetadataBehavior = app.Services.GetRequiredService(); + serviceMetadataBehavior.HttpsGetEnabled = true; +}); + +app.Run(); diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_Basic/Properties/launchSettings.json b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/Properties/launchSettings.json new file mode 100644 index 0000000..65fe123 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/Properties/launchSettings.json @@ -0,0 +1,11 @@ +{ + "profiles": { + "RabbitMQ_Basic": { + "commandName": "Project", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:7099;http://localhost:5157" + } + } +} \ No newline at end of file diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_Basic/RabbitMQ_Basic.csproj b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/RabbitMQ_Basic.csproj new file mode 100644 index 0000000..990a450 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/RabbitMQ_Basic.csproj @@ -0,0 +1,20 @@ + + + net6.0 + enable + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_Basic/RabbitMQ_Basic.sln b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/RabbitMQ_Basic.sln new file mode 100644 index 0000000..dd06052 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/RabbitMQ_Basic.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33110.190 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RabbitMQ_Basic", "RabbitMQ_Basic.csproj", "{CC514F4A-110C-4E6A-9ED6-BE1A9AE3E326}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CC514F4A-110C-4E6A-9ED6-BE1A9AE3E326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC514F4A-110C-4E6A-9ED6-BE1A9AE3E326}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC514F4A-110C-4E6A-9ED6-BE1A9AE3E326}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC514F4A-110C-4E6A-9ED6-BE1A9AE3E326}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4AF6709A-681C-4995-A51D-12F6D8F1BC69} + EndGlobalSection +EndGlobal diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_Basic/appsettings.Development.json b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_Basic/appsettings.json b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_Basic/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_TLS/EchoService.cs b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/EchoService.cs new file mode 100644 index 0000000..04dc7d3 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/EchoService.cs @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace RabbitMQ_TLS; + +public class EchoService : IEchoService +{ + public string Echo(string text) + { + System.Console.WriteLine($"Received {text} from client!"); + return text; + } + + public string ComplexEcho(EchoMessage text) + { + System.Console.WriteLine($"Received {text.Text} from client!"); + return text.Text; + } + + public string FailEcho(string text) + => throw new FaultException(new EchoFault() { Text = "WCF Fault OK" }, new FaultReason("FailReason")); +} diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_TLS/IEchoService.cs b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/IEchoService.cs new file mode 100644 index 0000000..09104a7 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/IEchoService.cs @@ -0,0 +1,34 @@ +using System.Diagnostics.CodeAnalysis; + +namespace RabbitMQ_TLS +{ + [DataContract] + public class EchoFault + { + [DataMember] + [AllowNull] + public string Text { get; set; } + } + + [ServiceContract] + public interface IEchoService + { + [OperationContract] + string Echo(string text); + + [OperationContract] + string ComplexEcho(EchoMessage text); + + [OperationContract] + [FaultContract(typeof(EchoFault))] + string FailEcho(string text); + } + + [DataContract] + public class EchoMessage + { + [AllowNull] + [DataMember] + public string Text { get; set; } + } +} diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_TLS/Program.cs b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/Program.cs new file mode 100644 index 0000000..2e28905 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/Program.cs @@ -0,0 +1,33 @@ +using System.Net; + +var builder = WebApplication.CreateBuilder(); +builder.Services.AddServiceModelServices(); +builder.Services.AddQueueTransport(); +builder.Services.AddServiceModelMetadata(); +builder.Services.AddSingleton(); + +var app = builder.Build(); +var rabbitMqHostUri = new Uri("net.amqps://HOST:PORT/amq.direct/QUEUE_NAME#ROUTING_KEY"); +var sslOption = new SslOption +{ + ServerName = rabbitMqHostUri.Host, + Enabled = true +}; +var credentials = new NetworkCredential(ConnectionFactory.DefaultUser, ConnectionFactory.DefaultPass); + +app.UseServiceModel(serviceBuilder => +{ + serviceBuilder.AddService(); + serviceBuilder.AddServiceEndpoint( + new RabbitMqBinding + { + SslOption = sslOption, + Credentials = credentials, + QueueConfiguration = new ClassicQueueConfiguration() + }, + rabbitMqHostUri); + var serviceMetadataBehavior = app.Services.GetRequiredService(); + serviceMetadataBehavior.HttpsGetEnabled = true; +}); + +app.Run(); diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_TLS/Properties/launchSettings.json b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/Properties/launchSettings.json new file mode 100644 index 0000000..55f95d7 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/Properties/launchSettings.json @@ -0,0 +1,11 @@ +{ + "profiles": { + "RabbitMQ_TLS": { + "commandName": "Project", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:7243;http://localhost:5172" + } + } +} \ No newline at end of file diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_TLS/RabbitMQ_TLS.csproj b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/RabbitMQ_TLS.csproj new file mode 100644 index 0000000..2259589 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/RabbitMQ_TLS.csproj @@ -0,0 +1,20 @@ + + + net6.0 + enable + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_TLS/RabbitMQ_TLS.sln b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/RabbitMQ_TLS.sln new file mode 100644 index 0000000..a4e4a60 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/RabbitMQ_TLS.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33110.190 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RabbitMQ_TLS", "RabbitMQ_TLS.csproj", "{2F6FEDD2-5C9B-4305-A825-3EFC2474AA11}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2F6FEDD2-5C9B-4305-A825-3EFC2474AA11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F6FEDD2-5C9B-4305-A825-3EFC2474AA11}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F6FEDD2-5C9B-4305-A825-3EFC2474AA11}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F6FEDD2-5C9B-4305-A825-3EFC2474AA11}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2A0B019A-1201-4A29-9D15-55E5ACC2AD42} + EndGlobalSection +EndGlobal diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_TLS/appsettings.Development.json b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/Basic/Binding/RabbitMQ/RabbitMQ_TLS/appsettings.json b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/Basic/Binding/RabbitMQ/RabbitMQ_TLS/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +}