views:

33

answers:

1

I need to download a Cab file from a Url into a stream.

using (WebClient client = new WebClient())
{
    client.Credentials = CredentialCache.DefaultCredentials;
    byte[] fileContents = client.DownloadData("http://localhost/sites/hfsc/FormServerTemplates/HfscInspectionForm.xsn");
    using (MemoryStream ms = new MemoryStream(fileContents))
    {
        FormTemplate = formExtractor.ExtractFormTemplateComponent(ms, "template.xml");
    }
}

This is fairly straight forward, however my cab extractor (CabLib) is throwing an exception that it's not a valid cabinet.

I was previously using a SharePoint call to get the byte stream and that was returning 30942 bytes. The stream I get through that method worked correctly with CabLib. The stream I get with the WebClient returns only 28087 bytes.

I have noticed that the responce header content-type is coming back as text/html; charset=utf-8

I'm not too sure why but I think it's what's affecting the data I get back.

+1  A: 

I beleive the problem is that SharePoint is passing the xsn to the Forms Server to render as an info path form in HTML for you. You need to stop this from happening. You can do this by adding some query string parameters to the URL request.

These can be found at:

http://msdn.microsoft.com/en-us/library/ms772417.aspx

I suggest you use NoRedirect=true

Iain Kelwick