如何让 OWIN 托管 SOAP 端点(不关心是否涉及 WCF,SOAP 提供 WSDL,这使得某些客户端更容易使用服务,这就是我想要 SOAP 和 REST 的原因)
我怀疑答案是:实现您自己的托管 SOAP 端点的中间件。如果这就是答案,那就这样吧,但这需要大量工作,所以我可能最终会坚持使用 WCF 并避免使用 OWIN(如果是这样的话)。我很难相信还没有人实现 SOAP 托管中间件......
通常,我们喜欢在我们的服务上同时使用 REST 和 SOAP 端点;目前我们使用 IIS 和 WCF Restful 位来托管 SOAP[ServiceContract]
/[OperationContract]
属性,其余的定义为[WebInvoke]
属性,有了这些属性,服务就不需要为不同的端点类型重新实现。
我们只需使用 ASP.NET 路由来添加新的ServiceRoute
向 URI/REST 添加剩余绑定,其服务与向 URI/SOAP 绑定肥皂相同。
现在我们正在考虑做一些新的服务工作,我想继续使用 OWIN,这样我们就可以在托管不可知论的情况下实现我们的新服务,因为某些服务将由 Windows 服务托管提供更好的服务,而另一些服务则由 IIS 服务提供更好的服务托管。
我摆弄了所有的事情,到目前为止我还没有想出获得 OWIN 托管的 SOAP 端点的方法。我通过让我的服务继承来很好地处理其余的事情ApiController
然后在 OWIN 应用程序中使用这个小代码片段Configuration
method:
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 编写新服务并且您仍然计划将它们托管在 IIS 中 using Microsoft.Owin.Host.SystemWeb。您可以忽略 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");
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)