我正在接管一个遗留的 SOAP 项目,我需要用 .NET Core 解决方案替换 SOAP 服务。我们不能更改 SOAP 客户端,因此我们不能查看 REST、GRPC 等。我查看了 SoapCore 和 CoreWCF,并且都使用 SOAP 标头用户名/密码身份验证演示,但是,我将使用 CoreWCF暂时。
现有的SOAP服务使用自定义的http状态码响应,例如在服务处理完成后以及在某些情况下出现SOAP错误时返回202。我意识到这是不正确的,但是,我们需要维护现有的业务逻辑。
我的问题是:
有许多旧的 SO 帖子提到 WebOperationContext,但是,我似乎无法在我的服务中访问它。OperationContext 似乎无法控制 HttpStatusCode。也许我错过了一些东西。IE:
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.BadRequest;
Run Code Online (Sandbox Code Playgroud)
这是我的示例项目细分:
程序.cs
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using System.Diagnostics;
namespace CoreWcf.Samples.Http
{
public class Program
{
public const int HTTP_PORT = 8088;
public const int HTTPS_PORT = 8443;
static void Main(string[] args)
{ …Run Code Online (Sandbox Code Playgroud) 我收到以下错误消息
服务实现对象未初始化或不可用。 at CoreWCF.Dispatcher.TaskMethodInvoker.InvokeAsync(Object instance, Object[] input) at CoreWCF.Dispatcher.DispatchOperationRuntime.<>c__DisplayClass71_0.<<InvokeAsync>b__0>d.MoveNext() --- 从上一个位置开始的堆栈跟踪结束 - -- 在 CoreWCF.Dispatcher.DispatchOperationRuntime.InvokeAsync(MessageRpc rpc)
请找到以下代码供您参考。
启动.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddServiceModelServices().AddServiceModelConfigurationManagerFile("Web.config");
services.AddServiceModelMetadata();
services.AddSingleton<IServiceBehavior, UseRequestHeadersForMetadataAddressBehavior>();
services.AddLogging(loggingBuilder =>
{
loggingBuilder.SetMinimumLevel(LogLevel.Information);
loggingBuilder.AddApplicationInsights("xxxxxxxxxxx930939xxxx");
});
services.AddSingleton<ILoggingContractResolver, LoggingContractResolver>();
IMapper mapper = SappoApiAutoMapperConfiguration.Configure().CreateMapper();
services.AddSingleton<IMessageStoreFactory, AzureBlobMessageStoreFactory>();
services.AddSingleton(mapper);
services.AddSingleton(typeof(IOutboundSappoLogger<>), typeof(OutboundSappoLogger<>));
services.AddSingleton<IBlobStorageSettingsHelper, BlobStorageSettingsHelper>();
services.AddSingleton<IBlobClientFactory, BlobClientFactory>();
services.AddSingleton<IServiceBusFactory>(ctx =>
{
return new ServiceBusFactory();
});
services.AddTransient<IShipperAsnService, ShipperAsnService>();
services.AddHttpContextAccessor();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseServiceModel(serviceBuilder =>
{
serviceBuilder.AddService<ShipperAsnService>(serviceOptions => …Run Code Online (Sandbox Code Playgroud)