How to Improve WCF Data Services Performance

前端 未结 8 560
有刺的猬
有刺的猬 2020-12-24 08:34

I\'m new to WCF Data Services so I\'ve been playing. After some initial tests I am disappointed by the performance of my test data service.

I realize that because a

相关标签:
8条回答
  • 2020-12-24 08:48

    I increased performance of our WCF Data Service API by 41% simply by enabling compression. It was really easy to do do. Follow this link that explains what to do on your IIs server: Enabling dynamic compression (gzip, deflate) for WCF Data Feeds, OData and other custom services in IIS7

    Don't forget to iisReset after your change!

    On the client-side:

    // This is your context basically, you should have this code throughout your app.
    var context = new YourEntities("YourServiceURL");
    context.SendingRequest2 += SendingRequest2;
    
    // Add the following method somewhere in a static utility library
    public static void SendingRequest2(object sender, SendingRequest2EventArgs e)
    {
        var request = ((HttpWebRequestMessage)e.RequestMessage).HttpWebRequest;
        request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
    }
    
    0 讨论(0)
  • 2020-12-24 08:54

    The link below has video that has some interesting WCF benchmarks and comparisons between WCF data services and Entity Framework.

    http://www.relationalis.com/articles/2011/4/10/wcf-data-services-overhead-performance.html

    0 讨论(0)
  • 2020-12-24 08:57

    things to try:

    1) results encoding: use binary encoding of your WCF channel if possible, see http://msdn.microsoft.com/en-us/magazine/ee294456.aspx -- alternately use compression: http://programmerpayback.com/2009/02/18/speed-up-your-app-by-compressing-wcf-service-responses/

    2) change your service instance behavior, see http://msdn.microsoft.com/en-us/magazine/cc163590.aspx#S6 -- try InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Multiple - if you can verify that your service is built in a thread safe way.

    Regarding your benchmark, I think you should simulate more realistic load (including concurrent users) and ignore outliers, the first request to IIS will be really slow (it has to load all the DLLs)

    0 讨论(0)
  • 2020-12-24 09:00

    Try setting security to "none" in the binding section in the configuration. This should make big improvement.

    0 讨论(0)
  • 2020-12-24 09:02

    In order to eliminate most of the connection overhead you can try to batch all operations to the WCF DS to to see if that makes a significant difference.

    NorthwindEntities context = new NorthwindEntities(svcUri);
    var batchRequests = 
         new DataServiceRequest[]{someCustomerQuery, someProductsQuery};
    
    var batchResponse = context.ExecuteBatch(batchRequests);
    

    For more info see here.

    0 讨论(0)
  • WCF DataServices are for providing your disparate clients with OpenData protocol; so as you don't have to write/refactor multiple web service methods for each change request. I never advise it to be used if the entire system is microsoft technology stack based. It's meant for remote clients.

    0 讨论(0)
提交回复
热议问题