2016-01-23 69 views
8

我喜歡用Microsoft.Exchange.WebService API兼容:EWS:不是的NetworkCredential在F#ExchangeCredentials

C#工作正常

ExchangeService service = new ExchangeService(userData.Version); 
service.Credentials = new NetworkCredential(userData.EmailAddress, userData.Password); 

F#給出了錯誤:類型 '的NetworkCredential' 不是兼容'ExchangeCredential'

open System 
open Microsoft.Exchange.WebServices.Data 
open System.Net 

[<EntryPoint>] 
let main argv =  

    let connectToService userData = 
     let service = new ExchangeService(userData.Version) 
     do 
      service.Credentials <- new NetworkCredential(userData.EmailAddress, userData.Password) 
      service.Url <- userData.AutodicoverUrl 
    0 

我認爲它與在C#API中定義的隱式轉換有關。所以我嘗試了(:>)和downcast(:?>)。我試圖使它明白(新的NetworkCredential ...:ExchangeCredentials),並且我已經在C#nuget中直接和在F#paket中檢查了引用的dll。 無論是在2015年VS測試在C#中它的.Net 4.5.2和F#,太多,如果是看它在App.config

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 

正確的路,我想用WebCredentials不正確辦法。我想使用SecureString而不是一個字符串,如果在C#中工作。所以我更可能會用我想了解的F#語法做錯了。

+0

謝謝你的提示。但問題是別的。請參閱下面TheInnerLight的解決方案。 – KCT

回答

7

正如您已經注意到ExchangeCredentials定義了從NetworkCredentialsExchangeCredentials的隱式轉換,這就是您的代碼在C#中正確運行的原因。請注意,這兩件事之間沒有繼承關係,因此您不能使用upcast(:>)和downcast(:?>)運算符。

隱式轉換作爲名爲op_Implicit的靜態成員出現在F#中。

let connectToService userData = 
    let service = new ExchangeService(userData.Version) 
    service.Credentials <- 
     NetworkCredential(userData.EmailAddress, userData.Password) 
     |> ExchangeCredentials.op_Implicit // call implicit conversion 
    service.Url <- userData.AutodicoverUrl 
+0

非常感謝!這是失蹤。 – KCT

相關問題