繁体   English   中英

使单个WCF服务支持SOAP,REST和WSDL

[英]Make a single WCF service support both SOAP, REST and WSDL

我正在尝试在.NET 3.5中构建一个支持SOAP的C#服务 - 并显示WSDL和REST。

SOAP服务和WSDL生成很容易使用ServiceHostBasicHttpBinding类。 得到了工作,客户很高兴。

由于SOAP调用所有使用的简单参数,因此客户端开发人员为某些命令请求了REST接口。 所以我将ServiceHost类更改为WebServiceHost ,添加了必要的WebInvokeWebGet属性,添加了WebHttpBinding类,并且bingo-REST和SOAP都在一个服务之外。 很酷,改变一个界面,REST和SOAP都得到了新的东西。

但是有一个问题 - 不再生成WSDL。 我无法浏览到http:// server / service?wsdl并获取WSDL文件。 检查MSDN文档,这似乎是默认WebServiceHost行为。

问题:我可以覆盖此行为以便可以获取WSDL吗? 没有与以前相同的URL - 它可以更改 - 但我只需要在服务中使用一些URL来为这些SOAP开发人员获取WSDL。

当你说“添加一个WebHttpBinding类”时,听起来你在代码中进行了很多配置而不是在配置文件中。

如果是这种情况,您可以尝试将配置移动到配置文件。 然后为合同创建2个端点,一个REST和一个SOAP,具有2个不同的地址和绑定。

但是有一个问题 - 不再生成WSDL。 我无法浏览到http:// server / service?wsdl并获取WSDL文件。 检查MSDN文档,这似乎是默认WebServiceHost的行为。

是的 - 这是REST的缺点之一 - 没有更多的WSDL,没有更多机器可读的服务描述。 您需要希望服务提供商为您提供有关您可以执行的操作的最新文档。

REST期间没有WSDL。 不能打开或任何东西 - 它只是不存在。

目前正在努力提供类似的东西 - 称为WADL (Web应用程序描述语言),但据我所知,它仍远未达到既定标准。 另见: 我们需要WADL吗?

大约在2007年,WSDL v2.0应该能够描述RESTful服务。 我发现在.Net v4.0中使用WCF,从纯RESTful服务生成的WDSL是无效的(WSDL v1.0?)。

我创建了一个类似的项目,它暴露了SOAP和RESTful端点,并且正如您所做的那样,通过修改接口来实现这一点:

    // Get all Categories - complex object response
    [OperationContract]                             // categories
    [WebGet(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetAllCategories")]
    CategoryCollection GetAllCategories();          // SubSonic object
    [OperationContract]                             // categories - respond with a JSON object
    [WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetAllCategories.JSON")]
    CategoryCollection GetAllCategoriesJSON();      // SubSonic object

需要注意的是,现在所有输入参数必须是所有SOAP请求的字符串类型。

有什么方法绕过这个吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM