Если кто-то будет пробовать код, который приводится в лекции, то стоит иметь ввиду — если вы сидите за корпоративным прокси с авторизацией, то будут следующие проблемы:
- Компилятор F#, как и все остальные .NET приложения, не умеет по умолчанию проходить авторизацию на прокси-сервере. В результате при компиляции выдаются такие ошибки:
C:\Users\user853423\Documents\Visual Studio 2013\Projects\ConsoleApplication3\Program.fs(15,21,15,129): typecheck error FS3033: The type provider 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' reported an error: Error reading schema. The remote server returned an error: (407) Proxy Authentication Required.
Чтобы это исправить, нужно найти рядом с компилятором (Fsc.exe) файл Fsc.exe.config и внести в <configuration> следующий раздел:
<system.net> <defaultProxy useDefaultCredentials="true" /> </system.net>
В файл App.config для вашего F# приложения нужно добавить тоже самое, т.к. это тоже .NET приложение.
- Такая же ошибка выдается в интерактивном режиме. Исправить можно указав в коде какой прокси использовать:
let proxy = new WebProxy("http://192.168.151.1:3128") :> IWebProxy proxy.Credentials <- NetworkCredential("proxy_user", "proxy_password") type dataType = ODataService<"https://api.datamarket.azure.com/bigml/CarCrashUSA2011/v1/"> let data = dataType.GetDataContext()
Также можно использовать прокси и авторизацию, которые уже указаны и использовались в IE, добавив следующий код вместо явного указания адреса прокси:
WebRequest.DefaultWebProxy <- WebRequest.GetSystemWebProxy() WebRequest.DefaultWebProxy.Credentials <- CredentialCache.DefaultNetworkCredentials
По теме можно почитать:
- fsharpforfunandprofit.com
- Real-World Functional Programming: With Examples in F# and C# (автор небезызвестный Jon Skeet)