2013-12-23 81 views
0

我正在嘗試在我們的WCF服務中包含protobuf-net序列化。 我已經找到所有的文章/教程,並已遵循所有說明,但我的示例項目似乎總是訴諸於使用默認的datacontractserializer。protobuf-net WCF配置問題

我相信我錯過了一些東西。

我甚至從protobuf-net網站下載了Shared DTO樣本。

有人能夠說出一些亮光嗎?

下面是web.config文件,然後App.config中

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 

    <system.serviceModel> 
     <behaviors> 
     <endpointBehaviors> 
      <behavior name="proto"> 
      <protobuf /> 
      </behavior> 
     </endpointBehaviors> 
     </behaviors> 
     <extensions> 
     <behaviorExtensions> 
      <add name="protobuf" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net" /> 
     </behaviorExtensions> 
     </extensions> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_IWcfService" maxReceivedMessageSize="2147483647" /> 
       <binding name="BasicHttpBinding_IService1" closeTimeout="00:10:00" 
        openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" 
        allowCookies="false" bypassProxyOnLocal="false" maxBufferPoolSize="2147483647" 
        maxReceivedMessageSize="2147483647" useDefaultWebProxy="true" /> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://houngoduguw7/ProtoBuf.Service/Service1.svc" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1" 
       contract="ProtofBuf.IService1" name="BasicHttpBinding_IService1" behaviorConfiguration="proto"/> 
      <endpoint address="http://houngoduguw7/Wcf.Service/WcfService1.svc" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWcfService" 
       contract="Wcf.IWcfService" name="BasicHttpBinding_IWcfService" /> 
     </client> 
    </system.serviceModel> 
</configuration> 


<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.diagnostics> 
    <sources> 
     <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing"> 
     <listeners> 
      <add name="ServiceModelTraceListener" /> 
     </listeners> 
     </source> 
     <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"> 
     <listeners> 
      <add name="ServiceModelTraceListener" /> 
     </listeners> 
     </source> 
     <source name="System.Runtime.Serialization" switchValue="Verbose,ActivityTracing"> 
     <listeners> 
      <add name="ServiceModelTraceListener" /> 
     </listeners> 
     </source> 
    </sources> 
    <sharedListeners> 
     <add initializeData="App_tracelog.svclog" type="System.Diagnostics.XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="ServiceModelTraceListener" traceOutputOptions="Timestamp" /> 
    </sharedListeners> 
    </system.diagnostics> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    </system.web> 
    <system.serviceModel> 

    <extensions> 
     <behaviorExtensions> 
     <add name="protobuf" type="ProtoBuf.ServiceModel.ProtoBehaviorExtension, protobuf-net" /> 
     </behaviorExtensions> 
    </extensions> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="proto"> 
      <protobuf /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name="ProtoBuf.Service.Service1"> 
     <endpoint address="proto" binding="basicHttpBinding" 
     contract="ProtoBuf.Service.IService1" behaviorConfiguration="proto" /> 


     </service> 
    </services> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <!-- 
     To browse web app root directory during debugging, set the value below to true. 
     Set to false before deployment to avoid disclosing web app folder information. 
     --> 
    <directoryBrowse enabled="true" /> 
    <security> 
     <authentication> 
     <anonymousAuthentication enabled="true" /> 
     <windowsAuthentication enabled="false" /> 
     </authentication> 
    </security> 
    </system.webServer> 

</configuration> 

回答

0

我能找到解決方案。我試圖序列化的類是根接口類型,它們沒有正確序列化。