C# 有没有办法让OWIN托管SOAP服务? 如何让OWIN托管SOAP端点(不管是否涉及WCF,SOAP提供了WSDL,这使得某些客户端更容易使用服务,这就是为什么我需要SOAP和REST)
我猜想答案是:实现自己的中间件,它承载一个SOAP端点。如果这是答案,那就这样吧,但这是一个很大的工作,所以如果是这样的话,我可能会坚持使用WCF并避免使用OWIN。我发现很难相信还没有人实现SOAP托管中间件C# 有没有办法让OWIN托管SOAP服务? 如何让OWIN托管SOAP端点(不管是否涉及WCF,SOAP提供了WSDL,这使得某些客户端更容易使用服务,这就是为什么我需要SOAP和REST),c#,wcf,rest,soap,owin,C#,Wcf,Rest,Soap,Owin,我猜想答案是:实现自己的中间件,它承载一个SOAP端点。如果这是答案,那就这样吧,但这是一个很大的工作,所以如果是这样的话,我可能会坚持使用WCF并避免使用OWIN。我发现很难相信还没有人实现SOAP托管中间件 通常,我们喜欢在服务上同时使用REST和SOAP端点;目前,我们使用IIS和WCF restful位来承载具有[ServiceContract]/[OperationContract]属性的SOAP,其余部分使用[WebInvoke]属性定义,使用这些属性,服务不需要为不同的端点类型重
通常,我们喜欢在服务上同时使用REST和SOAP端点;目前,我们使用IIS和WCF restful位来承载具有
[ServiceContract]
/[OperationContract]
属性的SOAP,其余部分使用[WebInvoke]
属性定义,使用这些属性,服务不需要为不同的端点类型重新实现
我们只是使用ASP.NET路由添加新的ServiceRoute
s,它使用与URI/soap的soap绑定相同的服务将rest绑定添加到URI/rest
现在,我们正在考虑做一些新的服务工作,我想继续使用OWIN,这样我们就可以实现我们的新服务,不依赖于主机,因为windows服务主机将更好地为某些服务提供服务,而IIS服务主机将更好地为某些服务提供服务
我所有的事情都在摆弄,到目前为止,我还没有办法得到一个由OWIN托管的SOAP端点。通过让我的服务继承自ApiController
,然后在OWIN应用程序的配置
方法中使用以下代码片段,我可以很好地处理其余部分:
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
[...]
在OWIN基础设施上托管WCF基础设施并不是那么容易,当然这是可能的,只需做一点工作,就可以调整或将所属的请求-响应层代理给WCF基础设施;WCF提供了一个不那么简单但完整的基础设施来完成类似的工作。MSDN上有一个自定义OWIN中间件示例,说明如何支持SOAP请求。它不是通用WCF主机,但可能足以公开现有的WCF服务(即[ServiceContract/OperationContract])在ASP.NET核心应用程序中。该示例不包括对[WebGet/WebInvoke]的支持,但可能足以让您开始学习 如果您的主要目标只是开始使用OWIN编写新服务,而您仍然计划使用OWIN将它们托管在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中设置了其他文件系统,并且我无法同时获得这两种行为(在需要时回退到其他处理程序并通过Owin管道)
这是使它对我起作用的配置:
appSettings
namedOwin:AutomaticAppStartup
)
中删除owinhttphandler)builder.UseFileServer()之后添加appBuilder.UseStageMarker(PipelineStage.MapHandler)
UseFileServer
必须在您设置的所有管道之后进行,否则在它之后设置的管道将无法工作,您将获得404
如果您的OWIN管道没有为遗留内容所在的路径注册中间件,您甚至不需要分叉管道(我的情况)。这根本不能回答我的问题。我不关心WCF,我只想要一个SOAP端点。我真的很抱歉我没有很好地看到问题的标题。向我道歉。别担心,我不是针对个人的,只是说这不是我想要的信息。我非常感谢你的努力和尝试!