我是一个完整的WCF新手.我正在尝试构建一个非常非常简单的IIS 7.0托管Web服务.出于我无法控制的原因,它必须是WCF而不是ASMX.它是预先存在的Web应用程序的包装服务,它只执行以下操作:
1)使用请求体XML封装的表单元素接收POST请求.像valuevalue这样的东西.这是非类型化的XML,XML是原子(表单)而不是记录/对象列表.
2)向请求XML添加几个标签,并使用简单的POST裸XML调用另一个基于HTTP的服务 – 实际上这将由一些内部SQL操作添加,但这不是问题.
3)从第三方服务接收XML响应,并在步骤1中将其作为对原始呼叫客户端的响应进行中继.
客户端(步骤1)将是某种基于Web的脚本,但可以是任何.aspx,python,php等.
我不能拥有SOAP和通常的基于WCF的REST示例与他们的合同和序列化让我感到困惑.这在概念上似乎是一个非常普遍且非常简单的问题.在代码中实现起来很容易,但是IIS托管的WCF是必需的.
有什么指针吗?
构建POX服务通常就像添加一些属性和更改web.config中的一些设置一样简单.首先,将[WebInvoke]添加到服务合同的POX方法中:
[ServiceContract] public interface IMyService { [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)] MyResult MyOperation(MyClass c); }
有时您还必须为数据协定指定XML命名空间:
[DataContract(Namespace = "http://example.com/myclass")] public class MyClass { ... }
然后设置web.config以使用webHttpBinding和webHttp行为:
<system.serviceModel> <services> <service behaviorConfiguration="MyApp.MyBehavior" name="MyApp.MyService"> <endpoint address="" binding="webHttpBinding" contract="MyApp.IMyService" behaviorConfiguration="POX" bindingNamespace="http://example.com/"> <--! More endpoint configuration here --> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <!-- Behavior config here --> </serviceBehaviors> <endpointBehaviors> <behavior name="POX"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> </system.serviceModel>
就是这样.它似乎比实际更难.
注意:如果您确实希望接收无类型XML而不是序列化类,则更改方法以接收XElement,如下所示:
[WebInvoke(...)] MyResult MyOperation(XElement element);