如何使用仅具有一个服务操作实现的protobuf-net来设置WCF服务

时间:2012-05-31 14:26:48

标签: wcf protobuf-net wcf-rest wcf-endpoint endpointbehavior

我使用WCF和C#创建了一个Web服务,目的是通过网页和Android应用程序交换一些数据。

我是WCF的新手,但我设法配置了2个端点的webservice,它返回来自每个webservice操作的xml和json数据格式。

我的问题是返回数据的大小。当然Json是更轻的thab xml,但仍然不够。所以我决定尝试两种选择:

  • gzipMessageEncoder(来自MS Tech WCF示例)
  • protobuf网

我可以在不同的端点上设置每个端点,但不知道如何让它们中的任何一个工作。当我尝试打开webservice端点url正确调用一个简单的hello world函数时,我的Web浏览器不会返回我指定的字节串。它什么都不返回,或者说“目的地无法到达”。

我必须提到webservice操作是为了返回对象和对象列表。

我想要实现的是拥有各种端点和一个Web操作实现。我不想重写所有函数来返回Stream并且在任何地方都有重复的函数。

如果有人可以提供帮助或放弃建议,我将不胜感激。

<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 个答案:

没有答案