• 0

[C#] soap is slow


Question

I was just noticing while transferring my binary files from my database my network utilization was only running about about 5.26%. Is there a reason .NET doesn't use 100% of your bandwidth when you are calling a web soap call? I'm transferring PDF files (which can avg about 6 MB per file) and it is agonizingly slow. The call is super fast for calls that the file is 500 KB or less. I have the feeling if it was really transferring the soap call as quickly as it could the network % would be 100 would it not?

Link to comment
https://www.neowin.net/forum/topic/1072085-c-soap-is-slow/
Share on other sites

14 answers to this question

Recommended Posts

  • 0

I was just noticing while transferring my binary files from my database my network utilization was only running about about 5.26%. Is there a reason .NET doesn't use 100% of your bandwidth when you are calling a web soap call? I'm transferring PDF files (which can avg about 6 MB per file) and it is agonizingly slow. The call is super fast for calls that the file is 500 KB or less. I have the feeling if it was really transferring the soap call as quickly as it could the network % would be 100 would it not?

Your assumption sir, is incorrect.

  • 0

SOAP isn't really designed for large files. It's supposed to be for messaging between endpoints. I would recommend using SOAP to expose a URL for the file and using normal HTTP or other methods for transferring the files.

This article may help some: http://msdn.microsoft.com/en-us/library/aa480521.aspx

  • Like 2
  • 0

I just spent the last couple months implementing a java soap web service in an asp.net application (it took so long because the group that wrote it either didn't care or didn't know that it didn't work in anything except java applications, and they had to fix it). All the service does is return either an image (as a byte array) or a URL to the image. Most of the images are less than 200KB, but there's a few that are over 1MB, and those take noticeably longer to retrieve and this is an internal intranet site. Like GreyWolf said, it'd be better to expose the URL to the file you want instead of actually returning the file, but if this is not an option, then you just have to work with what you have.

  • 0

Well all of the PDFs are stored as a byte array in a database. So I guess in theory I could save a tmp file and then expose the url to that tmp file. I'm guessing then use another method to download that file. The question is would that create more overhead then the way it's already being done?

  • 0

Well all of the PDFs are stored as a byte array in a database. So I guess in theory I could save a tmp file and then expose the url to that tmp file. I'm guessing then use another method to download that file. The question is would that create more overhead then the way it's already being done?

That's exactly what I did with the images that were coming back. I saved them on the server, then returned the direct URL to that image. There shouldn't be much (if any) overhead doing this other than the amount of time it'd take to save the file and finish the post back.

  • 0

Well all of the PDFs are stored as a byte array in a database. So I guess in theory I could save a tmp file and then expose the url to that tmp file. I'm guessing then use another method to download that file. The question is would that create more overhead then the way it's already being done?

I would say store the PDFs on a server with an accessible URL and store the address in the database. Did you check out the MSDN article I linked earlier? It has a number of suggestions on how to handle exactly what you're trying to do.

This article about SOAP + Attachments is referenced in the MSDN one but the link is old. It may be helpful as well.

  • 0

Sorry I should have mentioned I did look at those articles and they are really interesting. I'm going to go with the WCF MTOM route I think and re-design the core transfer functions. I don't know much about WCF but it looks really similar to regular web service (.asmx) coding. Or I may do the URL part I'm not sure. So many options lol. I really like the idea of the files being stored as a byte array blob in the database but if that just isn't a good practice maybe I should re-consider my methods. Because WCF will be basically the same thing just with a slightly more optimized method of transporting the xml file if I am not mistaken? MTOM just is an optimized method of transferring binary parts via soap message right?

  • 0

can you return sockets from web services to write data to?

You can, but there can be issues with it. Check the section labeled "Other Hybrid Approaches" in that article. :)

In reference to MTOM: http://msdn.microsof...y/aa528822.aspx

If your client and server are both using .NET you might also look into using remoting.

  • 0

I think part of the problem with the method I am currently using is that I may have my app.config setup incorrectly. There is a way I've heard to change how much data gets buffered / sent at once. So in theory if my internet can handle 1.2 MB/s then I could buffer 1.2MB then send it off as one chunk right?

  • 0

I think part of the problem with the method I am currently using is that I may have my app.config setup incorrectly. There is a way I've heard to change how much data gets buffered / sent at once. So in theory if my internet can handle 1.2 MB/s then I could buffer 1.2MB then send it off as one chunk right?

Theoretically; but I wouldn't advise it

This topic is now closed to further replies.
  • Posts

    • Yup, that's a doozy right there 😄
    • It's a bundle of tools created by a variety of people, so things can go wrong sometimes. It's a great addition to Windows, and I use a lot of the tools on a daily basis. Also, it's still a 0.**** release so quick updates are to be expected 😉
    • Oh, I did. And it's even worse than I was hoping! Besides a lot of techno-babble jargon (yes I understand 100% of it but it's still all just techno-babble) there's 2 key points that make me super-weary about even considering testing this out. -- By default, after installation, a relay is automatically set up, so you do not need to care about that. * Non-chatmail apps use email servers as a long-term message archive while chatmail clients use email servers for ephemeral instant message relay. * Supporting the full variety of classic email setups would require considerable development and maintenance efforts, and complicate making chatmail-based messaging more resilient, reliable and fast. -- Basically, the end-user device is the 'server' (relay) so there is NO ARCHIVING whatsoever because every message is necessarily ephemeral. Great for techno-paranoia (and for illicit activities preferring no tracks to cover) but terrible for everybody else. It's also ironically contradictory to engineering principles of redundancies besides the transport layers due to the explicit absence of any persistent storage. Instead of 'classic email address' retaining multi-GB messaging archives on its server, now every device must retain 100% of those storage demands. (Email messages were originally meant to be short correspondences, not the multi-MB attachments boondoggle that now exists with unlimited spam engines flooding every potential recipient.) Any device swap or reset (or loss) makes the entire message history go bye-bye forever... lest there's an off-device auto-archival "relay" mechanism that's really a separate server that holds onto all transported messages (an email server) that utilizes 'chatmail email address' identities (like an email server) and its own persistent storage archive (like an email server). But... this solution is hoping to exist alongside real-world email address identities (based on the email server relay pathway) but simply render messages in chat thread format in an ephemeral manner (with contents being encrypted, and messages auto-expiring) ... In the end, it's a chat app/experience for the Web3/P2P-at-all-costs zealots. (I have accts on all sorts of federated web3 services so I understand the technical and non-technical alike.) For any practical users, however, it's just another service to download/install, register, cross-share id cards/qr codes, but know that there's no history/archive whatsoever (by design) so no account/message recovery whatsoever... update the device, install a bummed update patch, or dare upgrade your device... all history, poof, gone. Ya gotta start everything over again like they're a brand new person.
    • You've tried DuckDuckGo and Brave Search, now get serious with SearXNG by Paul Hill Over the last decade, it has become quite trendy to dump Google Search in favor of privacy-preserving alternatives such as DuckDuckGo, Startpage, and Brave Search. These search engines have done a very good job at highlighting dodgy practices by Google, such as adjusting search results based on what it thinks you’ll like (filter bubble) and stalking you around the web to advertise to you. While these search engines are good starting points when compared to non-private services like Google, there are still quite a few issues with them. For example, both DuckDuckGo and Brave Search require running non-free JavaScript in your web browser, which is comparable to running proprietary software on your computer, meaning you can be sure about what it’s actually doing in the background. Another issue is that these search engines are hosted on the respective companies’ servers, and you are using a service that you don’t control. Finally, DuckDuckGo, while offering privacy features, relies heavily on Microsoft’s infrastructure for its results and, in the past, has permitted Microsoft tracking scripts. If you are looking for a more private search solution than DuckDuckGo, Brave Search, and Startpage, then I recommend taking a look at SearXNG. It is a privacy-respecting metasearch engine that can be used via different public instances, which is useful for mobile users, or you can install it on your computer or server and run it locally with maximum control. Unlike Google, Bing, or Brave Search, which crawl the web and have their own search indexes, SearXNG is a metasearch engine, meaning it taps other search engines, stripping your identifying data, such as IP address, user agent, and cookies, in the process. Your search query is sent to the other search engines you enable before aggregating the results. SearXNG has deployment flexibility. If you are a casual user or a mobile user and don’t want to run SearXNG locally, you can use a public instance that is hosted by someone else. The main problem with this is that you are putting trust in the maintainer of the instance regarding stuff like logs that they may keep; good hosts should have a privacy policy explaining their policies. If you are trying to use SearXNG, you can also install the software on your device and then head to 127.0.0.1:8080 in your browser and search from there. While you don’t have to worry about a third-party admin like the public instances, search engines could ultimately block your IP address if they frown on you pulling in their search results locally. If you want to run it locally, it’s a good idea to use proxies or VPNs to hide your actual IP. You don’t have to worry about this with a public instance, as search engines never see your IP address. The main privacy benefit of using SearXNG is that it isolates your identity from the underlying engines that it’s capable of searching, such as Google and Bing. These search engines will only see requests coming from a generic server, so they can’t profile you and create a bubble filter that influences what results you see. This also ensures that your search engine doesn’t turn into an echo chamber that prevents you from reading alternative points of view. As a free software project, you are allowed to inspect SearXNG to make sure there are no negative features bundled inside. This sets it apart from the privacy search engines mentioned earlier because you can’t check their source code. As a meta search engine, you are not restricted to getting results from one source. Due to the fact that it scrapes content from other websites, your SearXNG instance will periodically get blocked from different providers, so it’s good to select a range of sources as a backup. While enabling all of the services will give you great results, this can make searching slower. I am personally happy with slower searches for the best results, but you can always check which providers are slowing down your search from the search results page and disable them to speed things up. If you want decent results quickly, enable the main search providers such as Google, Brave, DuckDuckGo, Qwant, Bing, and Yahoo. This way, you get wide coverage without the latency. On the Engines tab in Preferences, do note that there are different tabs, such as General, Images, and Videos, with their own providers that can be toggled and are not covered by "Enable all" while on the General tab, so be sure to dig into each. Just a note, if you want to enable everything, press "Enable all" in one tab, then hit save at the bottom of the page, then do the next tab, and so on. If you press "Enable all", then do that in each tab, and then save, nothing will stick. When I had just some of the search engines enabled, I searched “define nefarious” and results came back with the definition of “define” - obviously that was a sucky result. However, when I had everything enabled, it found dictionary pages for the word “nefarious” and even had an inline definition on the sidebar, which is quite nice too - that was delivered by WolframAlpha for anyone wondering! Probably the worst thing about this meta search engine is that the engines you select are saved with a cookie, so you must enable them on every new device you use SearXNG on, including if you decide to go into incognito mode with your web browser. Honestly, I would say this is the most annoying aspect, and perhaps if your browser lets you choose a separate private browsing search engine, then it would be best to use DuckDuckGo for this portion of your browsing. Another weakness of SearXNG is the random blocking of it by search providers. When you are on the results page, expand the “Response time” box, and it will show things like “Suspended: too many requests” or “access denied”. This is why it is good to enable several providers so that there is always a fallback to get results from. I won’t pretend SearXNG will be for everyone, however, if you enable all of the providers and put up with the slower response time, the results can be really amazing. Even if you don’t want to use it as your daily driver, keeping a bookmark handy that links to it is a good idea if you ever feel like doing a deep dive into a niche topic where other search engines are just failing to bring up any good result, due to the amount of sources it looks on. If you’re interested in radical user control over the software you use, installing SearXNG locally can also be a good idea, but be prepared to be temporarily blocked from sites if you trigger bot sensors without a VPN. Personally, I’ve opted to use a public instance, rather than install it myself. If you want to use it via a public instance, head over to searx.space to find a provider. Let us know in the comments if you have used SearXNG or its predecessor, Searx. What do you think about the quality of the results?
    • Dear Neowin, If it is not too much trouble, can you start using the new-ish designations for Insider Preview? "Experimental" is different than "former Dev" as it can apply to different models, eg 26H1 or 26H2 etc, right? No need to seed confusion IMHO. And, please "finally" update your graphics. OK?
  • Recent Achievements

    • Week One Done
      flexorcist earned a badge
      Week One Done
    • One Month Later
      Woland13 earned a badge
      One Month Later
    • Week One Done
      Woland13 earned a badge
      Week One Done
    • One Year In
      bernmeister earned a badge
      One Year In
    • Week One Done
      Scoobystu earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      503
    2. 2
      +Edouard
      226
    3. 3
      PsYcHoKiLLa
      158
    4. 4
      Steven P.
      75
    5. 5
      FloatingFatMan
      71
  • Tell a friend

    Love Neowin? Tell a friend!