WCF>> DUPLEX>> SILVERLIGHT>> pollingDuplexHttpBinding =非常慢!大延迟

时间:2012-08-30 14:47:16

标签: wcf silverlight pollingduplexhttpbinding

我有

WCF与WPF applciation的wsDualHttpBinding绑定 - >效果很好!立即获取WCF发布方法。

另一个与pollingDuplexHttpBinding的绑定,用于silvelight 4 - >非常慢 - > 30 ++ - wpf应用程序获得它后的秒延迟(WPF立即获取)

为什么?最好的谷歌结果是

http://blogs.msdn.com/b/silverlightws/archive/2009/09/30/having-a-pollingduplex-service-and-any-other-wcf-service-in-the-same-website-causes-silverlight-calls-to-be-slow.aspx

我真的不知道如何继续......

<system.serviceModel>

    <!-- Register the binding extension from the SDK. -->
    <extensions>
      <bindingExtensions>
        <add name="pollingDuplexHttpBinding"
             type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,
                   System.ServiceModel.PollingDuplex, 
                   Version=4.0.0.0, 
                   Culture=neutral, 
                   PublicKeyToken=31bf3856ad364e35" />
      </bindingExtensions>
    </extensions>

    <bindings>
      <wsDualHttpBinding>
        <binding name="wsDualHttpBinding"
                 maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647"
                        maxStringContentLength="2147483646"
                        maxArrayLength="2147483646"
                        maxBytesPerRead="2147483647"
                        maxNameTableCharCount="2147483647" />
        </binding>
      </wsDualHttpBinding>
      <pollingDuplexHttpBinding>
        <binding name="multipleMessagesPerPollPollingDuplexHttpBinding"
                 duplexMode="MultipleMessagesPerPoll"
                 maxOutputDelay="00:00:30"
                 maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize="2147483647">
          <readerQuotas maxDepth="2147483647"
                        maxStringContentLength="2147483646"
                        maxArrayLength="2147483646"
                        maxBytesPerRead="2147483647"
                        maxNameTableCharCount="2147483647" />
        </binding>
      </pollingDuplexHttpBinding>
    </bindings>



    <services>
      <service behaviorConfiguration="" name="TheWCFService.Service1">

        <endpoint address="wsDualHttpBinding"
                  binding="wsDualHttpBinding"
                  bindingConfiguration="wsDualHttpBinding"
                  contract="TheWCFService.IService1">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

        <endpoint
          address="mex"
          binding="mexHttpBinding"
          bindingConfiguration=""
          contract="IMetadataExchange" />

        <endpoint
           address="pollingDuplexHttpBinding"
           binding="pollingDuplexHttpBinding"
           bindingConfiguration="multipleMessagesPerPollPollingDuplexHttpBinding"
           contract="TheWCFService.IService1">
        </endpoint>

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Service1/" />
          </baseAddresses>
        </host>

      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="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="true" />
          <dataContractSerializer maxItemsInObjectGraph="6553600"/>
          <serviceThrottling maxConcurrentSessions="500" maxConcurrentCalls="500" maxConcurrentInstances="500" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

1 个答案:

答案 0 :(得分:0)

第一步:从服务中删除AspNetCompatibilityRequirements

  [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1

public class Service1 : IService1

如果您从Web.config设置此项,请将其删除。

第二步:在Silverlight中使用客户端堆栈

 private void Application_Startup(object sender, StartupEventArgs e)
        {
                WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
                WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp);
        }