CoreWCF, the
.NET Core version of Windows Communication Foundation is finally
released. The 1.0 release of CoreWCF is compatible with .NET Standard 2.0 so that it will work with,
- .NET Framework 4.6.2 (and above)
- .NET Core 3.1
- .NET 5+
In this post, let's have a look at a sample implementation of WCF on top of .NET 6.
I have an ASP.NET Core Web API (with Minimal API support) created and
installed the following packages.
<ItemGroup> <PackageReference Include="CoreWCF.Http" Version="1.0.1" /> <PackageReference Include="CoreWCF.Primitives" Version="1.0.1" /> </ItemGroup>
Then I created the following services. I am exposing two services as I want to
show the support for different Bindings.
GreetService.cs
[ServiceContract] public interface IGreetService { [OperationContract] string Greet(string message); } public class GreetService : IGreetService { public string Greet(string message) { return $"You said: {message}"; } }
AnotherGreetService.cs
[ServiceContract] public interface IAnotherGreetService { [OperationContract] string AnotherGreet(string message); } public class AnotherGreetService : IAnotherGreetService { public string AnotherGreet(string message) { return $"You said another: {message}"; } }
Now I am modifying the Startup.cs as follows.
Startup.cs
using CoreWCF; using CoreWCF.Configuration; using CoreWCF.Description; using CoreWcfDemo.Server.Services; var builder = WebApplication.CreateBuilder(args); // Add WSDL support builder.Services.AddServiceModelServices().AddServiceModelMetadata(); builder.Services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>(); WebApplication? app = builder.Build(); app.UseServiceModel(builder => { // This service only supports BasicHttpBinding builder .AddService<GreetService>() .AddServiceEndpoint<GreetService, IGreetService>(new BasicHttpBinding(), "/GreetService/BasicHttp"); // This service supports BasicHttpBinding and WSHttpBinding builder .AddService<AnotherGreetService>() .AddServiceEndpoint<AnotherGreetService, IAnotherGreetService>(new BasicHttpBinding(), "/AnotherGreetService/BasicHttp") .AddServiceEndpoint<AnotherGreetService, IAnotherGreetService>(new WSHttpBinding(SecurityMode.Transport), "/AnotherGreetService/WSHttps"); }); var serviceMetadataBehavior = app.Services.GetRequiredService<ServiceMetadataBehavior>(); serviceMetadataBehavior.HttpGetEnabled = true; serviceMetadataBehavior.HttpsGetEnabled = true; serviceMetadataBehavior.HttpGetUrl = new Uri("http://localhost:5051/metadata"); serviceMetadataBehavior.HttpsGetUrl = new Uri("https://localhost:7051/metadata"); app.Run();
Now, I am adding a Console Application and adding Service References to the
project.
Add Service Reference |
Add Service Reference: WCF Web Service |
Discover Services |
Once the Service is discovered, I have selected Next and opted to use the
defaults. And once the Service Reference is created, I have the following
code to call the different WCF Service methods using different bindings.
using ServiceReference1; // BasicHttpsBinding var greetServiceClient = new GreetServiceClient( GreetServiceClient.EndpointConfiguration.BasicHttpBinding_IGreetService, "http://localhost:5051/GreetService/BasicHttp" ); var result = await greetServiceClient.GreetAsync("Hello"); Console.WriteLine(result); // WSHttpBinding var anotherGreetServiceClient = new AnotherGreetServiceClient( AnotherGreetServiceClient.EndpointConfiguration.WSHttpBinding_IAnotherGreetService, "https://localhost:7051/AnotherGreetService/WSHttps" ); result = await anotherGreetServiceClient.AnotherGreetAsync("Hello"); Console.WriteLine(result); Console.ReadLine();
And now when I run the Console App while the Server App is running, I can
see everything is working as expected.
You can find the complete code sample here:
https://github.com/jaliyaudagedara/corewcf-demo
https://github.com/jaliyaudagedara/corewcf-demo
Regards,
Jaliya
No comments:
Post a Comment