WCF: использовать один и тот же код для реализации SOAP и JSON? - PullRequest
2 голосов
/ 11 мая 2011

Я взял на себя разработку проекта .NET WCF.Среди прочего, проект содержит 3 файла:

  • IApi.cs <= Определение интерфейсов
  • JsonApi.svc.cs <= Реализация интерфейса для JSON
  • SoapApi.svc.cs <= Реализация интерфейса дляSOAP

Два файла реализации практически идентичны - по крайней мере, весь код в реализации методов идентичен.Я довольно новичок в программировании WCF, но мне кажется странным, что нам нужно продублировать код, просто чтобы реализовать JSON, а также SOAP.

Есть ли способ объединить это в одну реализацию и позволитьфреймворк решает, будут ли данные транспортироваться с помощью SOAP или JSON?

/ Carsten

1 Ответ

4 голосов
/ 11 мая 2011

Определяет две конечные точки с одним и тем же контрактом для реализации вашего сервиса.Определяет первый для использования 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>

Одна служба с двумя конечными точками

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...