gpt4 book ai didi

f# - EWS : NetworkCredential not compatible with ExchangeCredentials in F#

转载 作者:行者123 更新时间:2023-12-01 18:20:06 24 4
gpt4 key购买 nike

我喜欢使用 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 定义了从 NetworkCredentialsExchangeCredentials 的隐式转换,这就是您的代码在 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

关于f# - EWS : NetworkCredential not compatible with ExchangeCredentials in F#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com