Как настроить сервис WCF с использованием protobuf-net, имеющего только одну реализацию операции сервиса

Я сделал веб-сервис с использованием WCF и C# с целью обмена некоторыми данными с веб-страницами и приложением Android.

Я новичок в WCF, но мне удалось настроить веб-сервис с двумя конечными точками, которые возвращают форматы данных xml и json из каждой операции веб-сервиса.

Моя проблема здесь заключается в размере возвращаемых данных. Конечно, Json намного проще, но все еще не достаточно. Поэтому я решил попробовать 2 варианта:

  • gzipMessageEncoder (из примеров MS Tech WCF)
  • Protobuf-сеть

Я могу настроить каждый из них на разные конечные точки, но не знаю, как заставить их работать. Когда я пытаюсь открыть URL-адрес конечной точки веб-службы, корректно вызывающий простую функцию hello world, мой веб-браузер не возвращает набор байтов, который я указал. Он ничего не возвращает или говорит что-то вроде "пункт назначения недоступен".

Я должен упомянуть, что операции веб-сервиса сделаны, чтобы возвратить объекты и списки объектов.

То, чего я пытаюсь достичь, - это иметь разные конечные точки и одну веб-операцию. Я не хочу переписывать все функции так, чтобы они возвращали поток и везде были дублированные функции.

Если кто-то может помочь или оставить совет, я был бы признателен.

<system.serviceModel>
<bindings>
  <customBinding>
    <binding name="gzipCustomBinding">
      <gzipMessageEncoding innerMessageEncoding="textMessageEncoding" />
    </binding>
  </customBinding>
</bindings>

<behaviors>

  <serviceBehaviors>
    <behavior name="WcfService1.Service1Behavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>

  <endpointBehaviors>

    <behavior name="RESTEndpointBehavior">
      <webHttp helpEnabled="true"/>
    </behavior>

    <behavior name="JsonEndpointBehavior">
      <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json"/>
    </behavior>

    <behavior name="ProtoBufSerializationBehavior">
      <ProtoBufSerialization/>
    </behavior>
  </endpointBehaviors>

</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
<services>
  <service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
    <endpoint address="" binding="webHttpBinding" behaviorConfiguration="RESTEndpointBehavior" contract="WcfService1.IService1" />
    <endpoint address="json" binding="webHttpBinding" behaviorConfiguration="JsonEndpointBehavior" contract="WcfService1.IService1" />
    <endpoint address="proto" binding="basicHttpBinding" behaviorConfiguration="ProtoBufSerializationBehavior" contract="WcfService1.IService1" bindingConfiguration="MtomBinding" />
    <endpoint address="gzip" binding="customBinding" contract="WcfService1.IService1" bindingName="gzipCustomBinding" bindingConfiguration="gzipCustomBinding" />
  </service>
</services>

<extensions>
  <behaviorExtensions>
    <add name="ProtoBufSerialization" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net"/>
  </behaviorExtensions>

  <bindingElementExtensions>
    <add name="gzipMessageEncoding" type="Microsoft.Samples.GZipEncoder.GZipMessageEncodingElement, GZipEncoder, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null" />
  </bindingElementExtensions>
</extensions>
</system.serviceModel>

0 ответов

Другие вопросы по тегам