gpt4 book ai didi

c# - WCF 4 - Soap 和 REST 端点

转载 作者:太空狗 更新时间:2023-10-29 18:33:03 24 4
gpt4 key购买 nike

我一直在考虑使用 WCF REST 服务应用程序模板来托管我所有的 RESTful Web 服务,但是,我还希望能够使用 SOAP 端点公开我的 WCF 服务。

使用以下示例,我可以轻松地让我的 WCF RESTful 服务在 WCF 4 中运行:http://christopherdeweese.com/blog2/post/drop-the-soap-wcf-rest-and-pretty-uris-in-net-4

这可能吗?我想在 Global.asax 中应该有一种方法来连接其他端点并指定是否使用 basicHttpBinding。我是否不需要使用 WCF REST 服务应用程序模板并创建标准服务应用程序并通过配置将其连接起来?

感谢您的帮助。

最佳答案

虽然在大多数情况下我不会混合使用 REST 和 SOAP 端点,但我同意在某些情况下这是必要的。问题的答案:是的,可以将它们混合使用。您可以使用两个选项:

Global.asax.cs 中定义 REST 端点路由的调用

`RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(),   typeof(Service1)))` 

本质上在地址/Service1 处定义了一个服务。您可以添加一个新的“服务”,使用相同的服务实现,但使用不同的服务主机工厂(而不是使用定义 REST 端点的 WebServiceHostFactory,您可以使用自己的服务):

public class SoapServiceHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = base.CreateServiceHost(serviceType, baseAddresses);
ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
smb = new ServiceMetadataBehavior();
host.Description.Behaviors.Add(smb);
}

smb.HttpGetEnabled = true;
host.AddServiceEndpoint(serviceType, new BasicHttpBinding(), "soap");
return host;
}
}

在 global.asax.cs 中,RegisterRoutes:

    private void RegisterRoutes()
{
// Edit the base address of Service1 by replacing the "Service1" string below
RouteTable.Routes.Add(new ServiceRoute("Service1", new WebServiceHostFactory(), typeof(Service1)));

RouteTable.Routes.Add(new ServiceRoute("SoapService", new SoapServiceHostFactory(), typeof(Service1)));
}
  • 如果您真的想要一个具有两个端点的“逻辑”服务(我不推荐,因为之前的方法很简单),您可以再次创建一个自定义 ServiceHostFactory,然后在该工厂中添加两个端点:一个用于 REST(使用 WebHttpBinding/WebHttpBehavior),一个用于 SOAP(例如使用 BasicHttpBinding)。

关于c# - WCF 4 - Soap 和 REST 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5552695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com