WCF 添加 RESTful 支持,适用于 IIS、Winform、cmd 宿主

You can expose the service in two different endpoints. the SOAP one can use the binding that support SOAP e.g. basicHttpBinding, the RESTful one can use the webHttpBinding. I assume your REST service will be in JSON, in that case, you need to configure the two endpoints with the following behaviour configuration

<endpointBehaviors>
  <behavior name="jsonBehavior">
    <enableWebScript/>
  </behavior>
</endpointBehaviors>

  An example of endpoint configuration in your scenario is

<services>
  <service name="TestService">
    <endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
    <endpoint address="json" binding="webHttpBinding"  behaviorConfiguration="jsonBehavior" contract="ITestService"/>
  </service>
</services>

  

so, the service will be available at

Apply [WebGet] to the operation contract to make it RESTful. e.g.

public interface ITestService
{
   [OperationContract]
   [WebGet]
   string HelloWorld(string text)
}

  

Note, if the REST service is not in JSON, parameters of the operations can not contain complex type.

Reply to the post for SOAP and RESTful POX(XML)

For plain old XML as return format, this is an example that would work both for SOAP and XML

[ServiceContract(Namespace = "http://test")]
public interface ITestService
{
    [OperationContract]
    [WebGet(UriTemplate = "accounts/{id}")]
    Account[] GetAccount(string id);
}

  POX behavior for REST Plain Old XML

<behavior name="poxBehavior">
  <webHttp/>
</behavior>

  Endpoints

<services>
  <service name="TestService">
    <endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
    <endpoint address="xml" binding="webHttpBinding"  behaviorConfiguration="poxBehavior" contract="ITestService"/>
  </service>
</services>

  

Service will be available at

REST request try it in browser,

http://www.example.com/xml/accounts/A123

SOAP request client endpoint configuration for SOAP service after adding the service reference,

<client>
    <endpoint address="http://www.example.com/soap" binding="basicHttpBinding"
      contract="ITestService" name="BasicHttpBinding_ITestService" />
  </client>

  in C#

TestServiceClient client = new TestServiceClient();
client.GetAccount("A123");

  Another way of doing it is to expose two different service contract and each one with specific configuration. This may generate some duplicates at code level, however at the end of the day, you want to make it working.

 

时间: 2024-10-15 06:51:05

WCF 添加 RESTful 支持,适用于 IIS、Winform、cmd 宿主的相关文章

IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置

原文:IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置 站点--右键属性--http头 扩展名  mime类型.apk      application/vnd.android.package-archive.exe      application/octet-stream.woff     application/x-font-woff 字体.ipa      applicati

wcf-想问一下WCF添加服务的问题

问题描述 想问一下WCF添加服务的问题 找了几篇教程学习WCF, 刚才写了几个例子,有个疑问. 我是这样写的,加一个WCF库,然后用代码的方式发布到服务端,再在客户端进行服务引用. 写了几个例子,在添加服务引用的时候,有的是启动服务端后,在客户端引用服务输入URI,有的直接发现本解决方案的服务,不明白两者之间的区别, 看msdn上面之说两种方法都行... 刚才我想手动添加地址,先启动了WCF库,复制了地址,然后再客户端添加,为什么服务端没有启动也能找到服务呢? >_ < ? 解决方案 wcf需

[老老实实学WCF] 第三篇 在IIS中寄存服务

原文:[老老实实学WCF] 第三篇 在IIS中寄存服务 老老实实学WCF 第三篇 在IIS中寄宿服务   通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我们对WCF的编程生命周期有了一个最基本的了解.   在前两篇中演示的例子,一定要力求背着做下来,包括源程序.配置文件都要背着一行行的手写下来,这样才能有深刻的体会.WCF的知识零散复杂,必须扎扎实实的学习和练习.如果你还没有做到了然于胸,现

Mysql 之 添加innodb支持

在对mysql进行编译安装时,当安装完成后有时会发现不支持innodb存储引擎,这是因为编译安装时缺少支持innodb的参数: --with-plugins=PLUGIN[,PLUGIN..] Plugins to include in mysqld. (default is: none) Must be a configuration name or a comma separated list of plugins. Available configurations are: none ma

如何为Web项目添加Maven支持

对现有的项目集成Maven,需要修改以下地方: 1.将以下代码拷贝到工程根路径下的 .project 文件中的 <buildSpec> 标签下(如果代码存 在,则无须拷贝) <buildCommand> <name>org.maven.ide.eclipse.maven2Builder</name> <arguments></arguments> </buildCommand> 2.将以下代码拷贝到工程根路径下的 .pro

项目添加Maven支持后运行JUnit单元测试出现错误

项目添加Maven支持后,运行JUnit单元测试,出现一下错误: ERROR in ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [com.travelsky.tdp.pkgStock.integration.logback.appender.mail.SMTPAppender]. ch.qos.logback.core.util.DynamicClassLoading

Web项目添加Maven支持后的常见bug和错误

最近,对现有的Web项目添加Maven支持,结果出现了好多的bug,只好google查找原因,在此记录下 ,给自己和他人一个方便: 1.Maven命令执行失败,却没有出错信息  --> 可重新执行一次! 2.BaseConst.java:[1,0] 非法字符:\65279  --> 使用 notepad++ 工具打开之后,发现该文件格式为 UTF-8 (含BOM)格式,如下图: 开发常见bug"> 改为"UTF-8 无 BOM格式编码"即可. 分析:有可能是

我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutExce

我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException原因和解决 几个星期之前写了一篇关于如何通过WCF进行 双向通信的文章([原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication) ),在文章中我提供了一个如果在Console Application 调用Duplex WCF Service的Sample.前几天有个网友在上面留言说,在没有做任何改动得情况下,把

如何在JSF中给Tomcat添加CDI支持?

问题描述 如何在JSF中给Tomcat添加CDI支持?在Glassfish中默认支持CDI,可是在Tomcat中怎样支持CDI?在工程中加入了weld-osgi-bundle.jar,还需要做什么?  问题补充:<div class="quote_title">AngelAndAngel 写道</div><div class="quote_div">兄弟 ,没有这个方面的资料啊,你不用这个照样可以做JSF啊.</div>