Here are some simple steps to setup a working web service using the CoreWCF libray in a .NET core project
Step 1 - Add dependencies
- Nuget CoreWCF.Http
- Nuget CoreWCF.Primitives
Step 2 - Add contract and implementation
[ServiceContract]
public interface IMyService
{
[OperationContract]
Task<bool> IsAlive();
}
public class MyService : IMyService
{
public async Task<bool> IsAlive()
{
return true;
}
}
Step 3 - Add to startup
builder.Services.AddServiceModelServices()
.AddServiceModelMetadata();
builder.Services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>();
builder.Services.AddTransient<MyService>();
...
app.UseServiceModel(builder =>
{
BasicHttpBinding binding = new(BasicHttpSecurityMode.Transport)
{
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = int.MaxValue
};
binding.ReaderQuotas.MaxArrayLength = int.MaxValue;
binding.ReaderQuotas.MaxDepth = int.MaxValue;
binding.ReaderQuotas.MaxBytesPerRead = int.MaxValue;
binding.ReaderQuotas.MaxNameTableCharCount = int.MaxValue;
binding.ReaderQuotas.MaxStringContentLength = int.MaxValue;
builder.AddService<MyService>((serviceOptions) =>
{
serviceOptions.DebugBehavior.IncludeExceptionDetailInFaults = true;
})
.AddServiceEndpoint<MyService, IMyService>(binding, "MyService.svc/soap");
});
var serviceMetadataBehavior = app.Services.GetRequiredService<ServiceMetadataBehavior>();
serviceMetadataBehavior.HttpGetEnabled = true;
serviceMetadataBehavior.HttpsGetEnabled= true;
serviceMetadataBehavior.HttpGetUrl = new Uri("MyService.svc", UriKind.Relative);
serviceMetadataBehavior.HttpsGetUrl = new Uri("MyService.svc", UriKind.Relative);