有没有办法让OWIN托管SOAP服务?

如何让OWIN托管SOAP端点(不管是否涉及WCF,SOAP都会提供WSDL,使得某些客户端更容易使用服务,这就是我想要SOAP和REST的原因)

我怀疑答案是:实现自己的托管SOAP端点的中间件。 如果这就是答案,那就是它,但这是很多工作,所以我可能最终会坚持使用WCF并避免OWIN,如果是这样的话。 我发现很难相信没有人实现过SOAP托管中间件……


作为一项规则,我们喜欢在我们的服务上执行REST和SOAP端点; 目前我们使用IIS和WCF restful位来使用[ServiceContract] / [OperationContract]属性来托管SOAP,其余的是使用[WebInvoke]属性定义的,使用这些属性,服务不需要为不同的端点类型重新实现。

我们只是使用ASP.NET路由添加新的ServiceRoute ,它使用与绑定到URI / SOAP的SOAP相同的服务向URI / REST添加rest绑定。

现在我们正在寻找一些新的服务工作,我想继续使用OWIN,这样我们可以通过托管不可知论来实现我们的新服务,因为一些服务将更好地服务于Windows服务托管和一些更好的服务由IIS服务托管。

所有我都在摆弄东西,到目前为止,我无法获得由OWIN托管的SOAP端点。 通过使我的服务inheritance自ApiController ,然后在OWIN应用程序的Configuration方法中使用这一小段代码,我完成了其余的处理:

  public void Configuration(IAppBuilder app) { HttpConfiguration config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); app.UseWebApi(config); [...] 

MSDN上有一个自定义OWIN中间件示例,说明如何支持SOAP请求。 它不是通用的WCF主机,但可能足以在ASP.NET Core应用程序中公开现有的WCF服务(即[ServiceContract / OperationContract])。 该示例不包括对[WebGet / WebInvoke]的支持,但可能足以让您入门。

https://blogs.msdn.microsoft.com/dotnet/2016/09/19/custom-asp-net-core-middleware-example/

如果您的主要目标只是开始使用OWIN编写新服务,并且您仍计划使用Microsoft.Owin.Host.SystemWeb 在IIS中托管它们 。 您可以忽略OWIN管道中的WCF请求,并允许IIS ASP.NET管道处理它们。 这将使您能够编写OWIN中间件和传统WCF端点组合的服务。

 public static class WCFAppBuilderExtensions { public static IAppBuilder IgnoreWCFRequests(this IAppBuilder builder) { return builder.MapWhen(context => IsWCFRequest(context), appBuilder => { // Do nothing and allow the IIS ASP.NET pipeline to process the request }); } private static bool IsWCFRequest(IOwinContext context) { // Determine whether the request is to a WCF endpoint return context.Request.Path.Value.EndsWith(".svc", StringComparison.OrdinalIgnoreCase); } } 

然后在配置应用程序时调用IgnoreWCFRequests扩展方法。

 public class Startup { public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); WebApiConfig.Register(config); app .IgnoreWCFRequests() .UseWebApi(config) .Run(context => { return context.Response.WriteAsync("Default Response"); }); } } 

在OWIN基础上托管WCF基础设施并不是那么容易,确保它是可能的,通过一些工作,很明显可以适应或将欠必请的响应层代理到WCF基础设施; WCF提供了一个不那么容易但完整的基础设施来做类似的事情。