.net - WCF:使用相同的代码来实现 SOAP 和 JSON?

标签 .net wcf

我已经接管了 .NET WCF 项目的开发。除此之外,该项目包含 3 个文件:

  • IApi.cs <=定义接口(interface)
  • JsonApi.svc.cs <=实现 JSON 接口(interface)
  • SoapApi.svc.cs <=实现 SOAP 接口(interface)

这两个实现文件几乎相同 - 至少方法实现中的所有代码都是相同的。我对 WCF 编程很陌生,但让我感到奇怪的是,我们需要复制代码,只是为了实现 JSON 和 SOAP。

有没有一种方法可以将其合并到一个实现中,并让框架决定数据是通过 SOAP 还是 JSON 传输?

/卡斯滕

最佳答案

定义两个端点,并为您的服务实现使用相同的契约(Contract)。定义第一个使用 SOAP,然后定义第二个使用 Json:

<service name="YourService">
    <endpoint address="rest"
                        binding="webHttpBinding"
                        contract="IYourService"
                      behaviorConfiguration="RestBehavior"/>
    <endpoint address="soap"
                        binding="wsHttpBinding"
                        contract="IYourService"/>
    <endpoint address="mex"
                        binding="mexHttpBinding"
                        contract="IMetadataExchange"/>
</service>
<endpointBehaviors>
    <behavior name="RestBehavior">
        <webHttp/>
    </behavior>
</endpointBehaviors>

然后就会有一个端点 http://.../yourservice.svc/soap另一个地址为http://.../yourservice.svc/rest

[编辑]为了回答您的评论,我所说的是替换此部分:

<services>
  <service name="WebApi.SoapApi" behaviorConfiguration="ApiBehavior">
    <endpoint address="basic" bindingNamespace="http://api.myservice.dk/Basic" contract="WebApi.IApi" binding="basicHttpBinding" bindingConfiguration="ApiBinding" />
  </service>
  <service name="WebApi.JsonApi" behaviorConfiguration="ApiBehavior">
    <endpoint address="web" bindingNamespace="http://api.myservice.dk/Web" contract="WebApi.IApi" binding="webHttpBinding" bindingConfiguration="ApiBinding" behaviorConfiguration="JsonBehavior" />
  </service>
</services>

作者:

<services>
  <service name="WebApi.UniqueApi" behaviorConfiguration="ApiBehavior">
    <endpoint address="basic" bindingNamespace="http://api.myservice.dk/Basic" contract="WebApi.IApi" binding="basicHttpBinding" bindingConfiguration="ApiBinding" />
    <endpoint address="web" bindingNamespace="http://api.myservice.dk/Web" contract="WebApi.IApi" binding="webHttpBinding" bindingConfiguration="ApiBinding" behaviorConfiguration="JsonBehavior" />
  </service>
</services>

一个服务,有两个端点

关于.net - WCF:使用相同的代码来实现 SOAP 和 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5966401/

相关文章:

c# - 用于 netTcp 的绑定(bind)的 maxConnections 的最大大小

c# - 拖放不起作用

c# - 当通过 WCF 发送对象时,如何处理 LINQ to SQL DataContext 中的关系成员?

由于参数大小导致 WCF 服务通信异常

c# - SecurityPermission 和 SecurityPermissionFlag.SkipVerification 的后果

c# - DataContract/JsonSerializer '@' 附加到变量名称

c# - 列出所有使用目录服务的本地用户

c# - 向 OData(v4) Web API C# 添加自定义分页

.net - Nhibernate查询转换为通用列表时出错

wcf - 如何保护 Windows Azure 中运行且由 Windows 窗体应用程序访问的 WCF 服务的安全