我是一个完整的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);
