EWS:NetworkCredential 与 F# 中的 ExchangeCredentials 不兼容
EWS: NetworkCredential not compatible with ExchangeCredentials in F#
我喜欢用 Microsoft.Exchange.WebService API:
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 中定义的隐式转换有关。所以我尝试了向上 (:>) 和向下 (:?>)。我试图让它显式化(新的 NetworkCredential...:ExchangeCredentials)并且我已经检查了我在 C# nuget 中直接和在 F# paket 中使用的引用的 dll。
两者都在 VS 2015 中进行了测试。在 C# 中是 .Net 4.5.2,在 F# 中也是如此,如果它是在 app.config
中查找它的正确方法
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
而且我猜想使用 WebCredentials 并不是正确的方法。我想使用 SecureString 而不是字符串,如果可以在 C# 中使用。所以更有可能是我对我想了解的 F# 语法做错了。
如您所见,ExchangeCredentials
定义了从 NetworkCredentials
到 ExchangeCredentials
的隐式转换,这就是您的代码在 C# 中正常运行的原因。请注意,这两者之间没有继承关系,因此您不能使用向上转换 (:>
) 和向下转换 (:?>
) 运算符。
隐式转换在 F# 中显示为名为 op_Implicit
的静态成员。
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
我喜欢用 Microsoft.Exchange.WebService API:
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 中定义的隐式转换有关。所以我尝试了向上 (:>) 和向下 (:?>)。我试图让它显式化(新的 NetworkCredential...:ExchangeCredentials)并且我已经检查了我在 C# nuget 中直接和在 F# paket 中使用的引用的 dll。 两者都在 VS 2015 中进行了测试。在 C# 中是 .Net 4.5.2,在 F# 中也是如此,如果它是在 app.config
中查找它的正确方法 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
而且我猜想使用 WebCredentials 并不是正确的方法。我想使用 SecureString 而不是字符串,如果可以在 C# 中使用。所以更有可能是我对我想了解的 F# 语法做错了。
如您所见,ExchangeCredentials
定义了从 NetworkCredentials
到 ExchangeCredentials
的隐式转换,这就是您的代码在 C# 中正常运行的原因。请注意,这两者之间没有继承关系,因此您不能使用向上转换 (:>
) 和向下转换 (:?>
) 运算符。
隐式转换在 F# 中显示为名为 op_Implicit
的静态成员。
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