2016-01-23 8 views
8

でExchangeCredentialsとNetworkCredentialの互換性がありません:型 'NetworkCredentialのは' ではありません。EWS:私はMicrosoft.Exchange.WebServiceのAPIを使用したいのF#

C#が細かい

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

F#はエラーを与える作品'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で定義されている暗黙の変換と関係があると考えました。私は試してみました(:>)とダウンキャスト(:?)。私はそれをexplicite(new NetworkCredential ...:ExchangeCredentials)にしようとし、C#nugetとF#paketで直接使用されているように、参照されたdllをチェックしました。 どちらもC#ではそれはapp.configをで

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

それをルックアップするための正しい方法だと、私はWebCredentialsを使用することは正しくないと思いすぎた場合、ネット4.5.2およびF#でだVS 2015でテスト方法。私は、SecureStringを使用して、文字列ではなく、C#で動作する場合。だから、私が理解したいF#の構文に何か間違っている可能性が高いです。

+0

ありがとうございます。しかし問題は何か他のものでした。以下のTheInnerLightのソリューションを参照してください。 – KCT

答えて

7

ExchangeCredentialsは、NetworkCredentialsからExchangeCredentialsへの暗黙の変換を定義しています。そのため、コードはC#で正しく機能します。これら2つの間に継承関係はないので、アップキャスト(:>)とダウンキャスト(:?>)演算子は使用できません。

暗黙的な変換は、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 
+0

ありがとう!それは欠けていた。 – KCT

関連する問題