Question

Using MSXML to transmit files through SSL

Asked by: MELeBlanc


A couple of weeks ago I wrote a quick VB application that uses the MSXML component to pull a data file from a vendor's website through SSL on a site that is set for challenge/response.  Once it was completed and tested, the "powers that be" of course came to me and said... "That's great!  Now we need you to make it push a file to a web server in the same fashion."

After a few problems here and there, I finally came up with a solution that works.  What I am doing is using a VB program using the MSXML component to send the data file to the target web server.  On the web server is a small ASP page that captures the data being sent (through request.binaryread) and then writes it out to a file.  Worked great for small files but just as soon as the file got over 100K there were timeout problems and even extending the script timeout still wasn't that efficient.  So.... what I ended up doing was have the VB component slice the file up into 10K chunks and send them across the wire to the catch script that then would put the pieces back together (error and data integrity checks are done as well).  Well it works, but to transmit a 13MB file it takes a little over 6 minutes to do it... and that's locally!  I don't even want to make a guess as to how long it would take to transmit through the Internet!!

Now... to my question... is there an easier/more efficient way to do this using these same components?  It is a requirement to use SSL for obvious security reasons, in addition to the fact that it will run through already opened ports on our corporate firewall.

I'm looking for actual code examples.... no theories please ;)

I'll start it off at 100 points, but if the examples are plug and play enough I will *gladly* increase the points!!

Thanks in advance.

-M

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2001-11-15 at 08:49:02ID20233874
Tags

msxml

Topic

Visual Basic Programming

Participating Experts
4
Points
100
Comments
33

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. MSXML
    Does the latest version MSXML parser process schemas written in the w3c format (example below) or do you have to write the schema in the microsoft format ? <?xml version="1.0" ?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...
  2. User authentication with MSXML object
    Hi, I'm using the MSXML object in some VBA code to retrieve data and load it into Excel 97. Excel is being run form within IE5 by redirecting to https://hostname/aa/bbb/file1.xls The source of the data being called by the Excel VBA code is on a secure server so I need the ...
  3. MSXML problem
    Are there any known problems with MSXML objects specific to Windows 2000 SP 4?
  4. MSXML
    I am trying to add an element to an xml document: <MSCommerceCatalogCollection2 version ="2.0"/> MSXML does not want to...it screams about having quote marks in the follwing code: "MSCommerceCatalogCollection2 version =\"2.0\"" How do I...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: dtomynPosted on 2001-11-15 at 10:42:22ID: 6636280

listening... may participate in a bit...

 

by: aikimarkPosted on 2001-11-15 at 14:25:59ID: 6636834

magic keyword: SOAP (transmission protocol)

 

by: MELeBlancPosted on 2001-11-16 at 05:41:51ID: 6638052

Oh.... perhaps I should have said

"I'm looking for actual code examples.... no theories, magic potions, or magic phrases please ;)"

HAHAHA j/k....

-M

 

by: aikimarkPosted on 2001-11-16 at 05:56:42ID: 6638084

MEL,

"...is there an easier/more efficient way to do this using these same components? "

1. Since we can't see your existing code, how can we tell you if there is a more efficient way to do what you want to do?

2. You might be constrained in solving your problem by assumptions and requirements you've already accepted.  The "powers that be" might have to live with their decisions or change the solution constraints.

3. I might suggest compressing the 13MB file and attach it to an secure email transmission.  The receiving email system and automatically process it.

4. Is your problem the speed or something else?

5. Since you already have some transmission working, what's your REAL problem?  (may have been answered in 4)

 

by: MELeBlancPosted on 2001-11-16 at 07:35:32ID: 6638334

Perhaps I didn't make it clear enough... the speed at which it transmits is the issue... that is what I was referring to when I stated:

"Well it works, but to transmit a 13MB file it takes a little over 6 minutes
to do it... and that's locally!  I don't even want to make a guess as to how long it would take to transmit
through the Internet!!"

Unfortunately e-mail isn't an option... I had already wanted to perform something similar with SMIME but it was rejected due to the vendor we are sending the file to.

 

by: MELeBlancPosted on 2001-11-16 at 07:42:19ID: 6638354

Code?

Here is the section that does the actual sending from my proof of concept project:

------------------------------------------------------
    Dim objSend    As New MSXML2.XMLHTTP30
    Dim URL        As String
   
    Dim DataBeingPushed As String
    Dim FileName        As String
    Dim FileSize        As Long
    Dim PartNumber      As Long
    Dim TotalParts      As Long
    Dim AllSent         As Boolean
    Dim CountTries      As Integer
    Dim FilePart        As String
    Dim fs              As New Scripting.FileSystemObject
    Dim objFile         As File
    Dim objStream       As TextStream
   
    Dim PacketSize      As Long
    Dim StartPos        As Long
    Dim EndPos          As Long
   
    Dim StartTime       As Date
    Dim EndTime         As Date
   
    'Open the text file to be sent
    Set objFile = fs.GetFile(Trim(txtfilename.Text))
   
    'Set Packet Size
    PacketSize = 10000
   
    'Determine file size
    FileSize = objFile.Size
    Debug.Print Now & " - Length of Data File: " & FileSize
   
    'Determine number of "packets"
    TotalParts = Int(FileSize / PacketSize)
    If FileSize Mod PacketSize > 0 Then
        TotalParts = TotalParts + 1
    End If
   
    'Filename to be sent to client
    FileName = Trim(txtcatchname.Text)
   
    Debug.Print Now & " - Data set to transmit.... starting to push"
   
    AllSent = False
    CountTries = 1
    PartNumber = 0
   
    'Target machine
    URL = Trim(txttarget.Text)
   
    StartTime = Now
   
    'Open file to be transmitted
    Set objStream = objFile.OpenAsTextStream(ForReading)
   
    Do Until AllSent
   
        'Check if it is a ReTry
        If CountTries = 1 Then
            PartNumber = PartNumber + 1
           
            'Build Part to Send
            StartPos = (PartNumber - 1) * PacketSize + 1
            EndPos = StartPos + PacketSize - 1
            If EndPos > FileSize Then
                EndPos = FileSize
            End If
           
            'Read the part from the file
            FilePart = objStream.Read((EndPos - StartPos + 1))
        End If
       
       
        objSend.open "POST", URL, False
        objSend.setRequestHeader "FileName", FileName       'Send filename to target
        objSend.setRequestHeader "PartNumber", PartNumber   'Send partnumber to target
       
        Debug.Print Now & " - Sending Filename: " & FileName & " Part Number: " & Format(PartNumber, "###,##0") & " of " & Format(TotalParts, "###,##0") & " Positions: " & Format(StartPos, "###,###,##0") & "-" & Format(EndPos, "###,###,##0") & ". Try#" & CountTries
       
        On Error Resume Next
        'Send the packet
        objSend.send (FilePart)
        On Error GoTo 0
         
        If objSend.responseText = "SUCCESS" Then
            'SUCCESS text is sent back from target machine as a response
            If PartNumber = TotalParts Then
                AllSent = True
            Else
                'Reset tries counter
                CountTries = 1
            End If
        Else
            'Anything else is a failure... retry if applicable
            If CountTries > 3 Then
                Exit Do
            Else
                CountTries = CountTries + 1
            End If
        End If
       
    Loop
   
    EndTime = Now
   
    If AllSent Then
        Debug.Print Now & " - All parts for file " & FileName & " have been successfully sent. " & Now
        Debug.Print "Total Transfer time: " & Format(DateDiff("s", StartTime, EndTime), "###,###") & " seconds."
        MsgBox "Total Transfer time: " & Format(DateDiff("s", StartTime, EndTime), "###,###") & " seconds."
    Else
        Debug.Print Now & " - There was a problem with the transmission of one or more parts to this file - " & FileName
    End If
   
    'Close the file
    objStream.Close

----------------------------------------------------------

Here is the section of ASP code that is doing the receiving:

      if trim(Request.ServerVariables("HTTP_FileName")) > "" _
      and trim(Request.ServerVariables("HTTP_PartNumber")) > "" then
            
            dim objFileStream
            dim testfile
            dim strFileName
            dim intPartNumber
            dim bData
            dim strData
            dim lngLength
            
            'Retrieve Filename and Part Number
            strFileName = Request.ServerVariables("HTTP_FileName")
            intPartNumber = Request.ServerVariables("HTTP_PartNumber")
            strFileName = "D:\TestPush\" & strFileName
            
            Set objFileStream = createobject("Scripting.FileSystemObject")
            
            If intPartNumber = 1 Then
                  'Create Text File
                  Set testfile = objFileStream.CreateTextFile(strFileName,true,false)
            Else
                  'Open Text File for Append
                  Set testfile = objFileStream.OpenTextFile(strfilename,8,false)
            End If
            
            bData = Request.BinaryRead(Request.ServerVariables("HTTP_Content_Length"))
            
            'Convert to Binary
            dim i
            for i = 1 to lenb(bData)
                  strData = strData & Chr(AscB(MidB(bData,i,1)))
            next
            
            testfile.write(strData)
            
            testfile.close
            
            Set testfile = Nothing
            Set objFileStream = Nothing
            
            Response.Write "SUCCESS"
      else
            Response.Write "FAILURE"
      end if

-------------------------------------------------------

It's down and dirty code at the present... so I'll apologize to begin with  ;)

Thanks.

-M

 

by: MELeBlancPosted on 2001-11-16 at 07:44:54ID: 6638367

Man... even my comments are nasty in that code...
an addendum... the section in the catch code that says it is converting *to* binary is actually converting *FROM* binary...  I'm thinking that this might be part of my slowdown since there has to be a more efficient way of doing this conversion.  But I don't think that'll solve my entire problem.

-M

 

by: aikimarkPosted on 2001-11-16 at 16:00:49ID: 6638968

Mel,

The idea behind FTP is to kick off the transfer and forget about it.  The protocol includes transmission checks to make sure the entire file gets there.  If you want transmission assurances, sent a short message (with the destination filename and its CRC32 value) to a server program that is monitoring the destination directory.  When successfully received, the server program should send a message back to your client program, confirming transmission and allowing the deletion of the file on the client's PC.  Stop doing this yourself.

Before transmission, COMPRESS THE FILE!!!!
Note: You can also encrypt the file when you compress it.

Your performance problem is I/O bound.  You must address that constraint first.

If you have a business "process", you will probably want to look at the BizTalk architecture.  Part of the BizTalk services is SOAP.

 

by: MELeBlancPosted on 2001-11-27 at 05:45:27ID: 6655115

Well BizTalk is not going to help me... and FTP will not work because, it needs to run through HTTPS.  You see, we have certain guidlines and a bunch of nasty firewalls  ;-)  One of these guidlines is that we cannot have an outside vendor come into our firewall with FTP, and from our side we are only allowed to *pull* with FTP (unless we want to go through a TON of hoops and paperwork... AND *wait* for the corporate office to prioritize the work they would need to do, etc. etc. ad nauseum.  Hence the requirement for HTTPS.. it not only allows us to run through an already opened port in the firewall, but since the rules for push/pull are already established (and OPEN!), we can get things done in a much quicker timeframe.

-M

 

by: aikimarkPosted on 2001-11-27 at 05:52:33ID: 6655138

I repeat "Have you looked at SOAP?"  It uses HTTPS.

 

by: MELeBlancPosted on 2001-11-27 at 06:12:13ID: 6655198

No, I'm not all that familiar with it.. do you have any  code examples (or links that I can check out)?

 

by: aikimarkPosted on 2001-11-27 at 06:35:00ID: 6655283

There is a SOAP toolkit documentation:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/soap/htm/soap_guidelines_9soj.asp

Excellent page of SOAP/XML-Messaging links:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsrvspec/html/globalxmlwebsrvinterop.asp

SOAP toolkit page:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsrvspec/html/globalxmlwebsrvinterop.asp

==================================================
please note that all of these pages come from msdn.microsoft.com.

 

by: MELeBlancPosted on 2001-12-13 at 09:42:49ID: 6676534

Sorry about the delay... year end projects and all kinda took up my time... (and still are ;-)

Those links really don't help me out that much.. I'm one of those people that need to actually step through code to see how something new works.

Any other more specific links to code?

Not sure when I'll be able to get back to this.. but I'll resolve this question one way or another soon... (I HOPE!!)

-M

 

by: dwarePosted on 2001-12-31 at 10:24:52ID: 6702759

Hi mel.. i think i have a possible solution for you.  I have used his technology quite a bit. and it has worked for me in many diffent situations.  This is what i would do (architecturally speaking).  Build yourself an asp page that calls your vb component.  have the asp page sit at the webserver where the ssl is located.  compress the file and then convert the compressed file to a string.  load the file with xml headers around it and use the Send method of the msxml dom object to send the file to the corresponding ASP page.  In the Asp page you will catch the file in the response object move it to whatever location you like convert the file back to its non string format.. then decompress the file inside your firewall.

I think this will work.  if you need some source code let me know.

This should handle the file size.. security and the firewall issues you currently have.

 

by: MELeBlancPosted on 2001-12-31 at 11:11:16ID: 6702838

That is pretty much what I am doing now... the only difference is that I am not compressing the file. The compressed file would still have to be broken up into chunks and passed along that way... so really the only thing you are offering to me (unless I'm mistaken... which I might be! ;-) is the compression.. which really doesn't address the issue.

 

by: dwarePosted on 2002-01-03 at 16:55:07ID: 6709172

actually mel what i am offering to you is not passing the binary byte data... you should pass a string.  its the same way a webservice would work...  it does not pass binary data across the wire.  it serializes data by passing the data as a string.  you would convert the file to a string.. not the data in the file.. but the actual file itself can be converted to a string. then a compressed string.. then you can pass it across the web.(done it hundreds of times.)

 

by: MELeBlancPosted on 2002-01-04 at 09:37:30ID: 6710840

hmmm sounds like it might be what I am looking for...

could you supply some code examples?

 

by: MELeBlancPosted on 2002-03-21 at 14:18:12ID: 6887091

Since dware never did get back to me on those code samples....

 

by: MoondancerPosted on 2002-03-22 at 04:14:45ID: 6888360

This question has been pending deletion.  Questions with content cannot be deleted without the next two things in the process.

1) post your intentions to delete the question and why.  Give experts a couple of days to comment and/or add what you need in the event the solution evolves and can be awarded

2) if no activity within the next few days, ask Moderator to refund and delete, or refund and PAQ, if there is value contained within this question that may help others who search our PAQ (Previously Asked Questions) database.

We have been migrating servers and had some Email outages that may account for the lack of response here, and this message may trigger a new response so that you can get what you need here.  Please let us know in your Community Support question to refund/PAQ or delete this, if noting evolves here the next few days.

Thanks,
Moondancer - EE Moderator

 

by: aikimarkPosted on 2002-03-22 at 05:25:09ID: 6888490

I think the thread is worth seeing.  The transmission duration problem could be solved a number of ways, mostly through compression.  MELeBlanc seemed to have ignored these remarks altogether.

Is this still a problem?

If not, how was it solved?

 

by: MoondancerPosted on 2002-03-22 at 13:58:58ID: 6889931

Thank you, aikimark, for returning and expounding further.
Hopefully MELeBlanc will respond and this can be finalized.
Moondancer - EE Moderator

 

by: MELeBlancPosted on 2002-03-27 at 07:41:41ID: 6899400

Compression is *not* what I am looking for.
Becuase even a large compressed file will cause the same transfer problems I am encountering now.

When you pull a file through the MSXML object the transfer happens extremely quickly, If I take that same file and push it to a machine is when it takes a lot longer.  My question from the beginning was whether or not there is a way to send the file similar to the way one receives it through the XML object.  The code that I posted above was what I came up with to push the file... and basically, using the same concept, was there a better way to do it.

The process that dware was referring to sounded as close as I was going to get to my answer.. that was the reason for me asking for some code samples.

-M

If this is a "problem" for either one of you then I'll just randomly accept something as an answer.. and I'll even be kind enough to give it an 'A'.  I really don't care about the points.... I was just trying to keep the area clean.

 

by: aikimarkPosted on 2002-03-28 at 05:38:35ID: 6902429

For non-.NET applications, turn the KEEP-ALIVE flag turned off.  This should increase packet transmissions from 5/sec to 200/sec.

 

by: MELeBlancPosted on 2002-03-28 at 06:31:48ID: 6902574

Sounds like an option... where is that option set?

 

by: aikimarkPosted on 2002-03-28 at 07:40:37ID: 6902768

it is an HTTP-related setting on your server.

 

by: MELeBlancPosted on 2002-03-28 at 08:52:00ID: 6903013

Hmmm... sounded good...
I ran numerous tests and found that the perfomance of the application went down when  I turned off keep-alives.  On a 5MB file it actually increased the transfer time in the neighborhood of 30 seconds.

-M

 

by: aikimarkPosted on 2002-03-28 at 09:58:51ID: 6903238

is this a VB.NET application?

 

by: MELeBlancPosted on 2002-03-28 at 11:39:46ID: 6903470

Nope.. the whole thing was written in VB6.

 

by: aikimarkPosted on 2002-03-28 at 12:18:23ID: 6903556

check out these references:
http://www.pipeboost.com/msxml.html (very promising)
http://www.15seconds.com/issue/010522.htm

Have you identified non-transmission potential bottlenecks, such as VB string concatenation or encoding?

 

by: MELeBlancPosted on 2002-03-28 at 13:58:52ID: 6903698

That first link is just about the exact way I am pulling data from a couple of our customers... in that direction it flies because it is actually streaming the information down to me.

That second link looks *EXTREMELY* interesting.. and might be exactly what I was looking for!

I'll look into it in more detail tomorrow when I return to work!

Thanks!

-M

 

by: MELeBlancPosted on 2002-03-28 at 14:01:47ID: 6903700

Oh.. and as for bottlenecks...
I'm thinking that the main bottleneck is a combination of two things:
1. I'm not streaming the data to the target.. I'm sending it in chunks.
2. The catch script running at the target site is doing a conversion from binary.

Hence, the reason why that second link looks real good.. no conversion.. and it appears to be streaming the data!!

 

by: aikimarkPosted on 2002-03-29 at 06:27:27ID: 6905021

While you're looking, check out your Timeout-related settings.

 

by: MELeBlancPosted on 2002-03-29 at 07:09:44ID: 6905084

Yep... that improved the transfer by about a third... good enough for me!  ;-)
The JavaScript example works flawlessly.. now all I need to do is convert it over to VB (not as clean as I thought it was going to be ;-)

Anyhow.. that was the exact type of transfer process I was looking for...

Thanks!

-M

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...