我已经接管了 .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/