当前位置 : 主页 > 网页制作 > xml >

xml – 没有复杂序列化的简单WCF服务(POX)

来源:互联网 收集:自由互联 发布时间:2021-06-13
我是一个完整的WCF新手.我正在尝试构建一个非常非常简单的IIS 7.0托管Web服务.出于我无法控制的原因,它必须是WCF而不是ASMX.它是预先存在的Web应用程序的包装服务,它只执行以下操作:
我是一个完整的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);
网友评论