Как настроить сервис 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>