2016-01-23 13 views
8

मैं Microsoft.Exchange.WebService एपीआई का उपयोग करना चाहते के साथ संगत नहीं:EWS: NetworkCredential एफ # में ExchangeCredentials

सी # ठीक काम करता है

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

एफ # त्रुटि देता है: प्रकार '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 

मैंने सोचा कि यह अंतर्निहित रूपांतरण कि सी # एपीआई में परिभाषित किया गया है के साथ क्या करने के लिए कुछ नहीं है। इसलिए मैंने कोशिश की (:>) और डाउनकास्ट (:?>)। मैंने इसे स्पष्ट करने की कोशिश की (नया नेटवर्क क्रेडेंशियल ...: एक्सचेंज क्रेडेंशियल्स) और मैंने संदर्भित डीएलएस की जांच की है क्योंकि मैंने सीधे सी # न्यूजेट में और एफ # पैकेट में उपयोग किया था। दोनों वी.एस. 2015 में परीक्षण किया सी # में यह नेट 4.5.2 और एफ # में है, भी अगर यह सही तरीका app.config

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

में उसे ढूंढने की है और मुझे लगता है कि WebCredentials का उपयोग कर सही नहीं है मार्ग। मैं एक सिक्योरस्ट्रिंग का उपयोग करना चाहता हूं, न कि एक स्ट्रिंग और यदि सी # में काम करता है। तो यह अधिक संभावना है कि मैंने एफ # सिंटैक्स के साथ कुछ गलत किया जिसे मैं समझना चाहता हूं।

+0

आपके संकेत के लिए धन्यवाद। लेकिन समस्या कुछ और थी। नीचे TheInnerLight से समाधान देखें। – KCT

उत्तर

7

जैसा कि आपने देखा है ExchangeCredentialsNetworkCredentials से ExchangeCredentials से एक अंतर्निहित रूपांतरण को परिभाषित करता है, यही कारण है कि आपका कोड सही ढंग से C# में कार्य करता है। ध्यान दें कि इन दो चीजों के बीच कोई विरासत संबंध नहीं है, इसलिए आप अपस्टास्ट (:>) और डाउनकास्ट (:?>) ऑपरेटरों का उपयोग नहीं कर सकते हैं।

लागू रूपांतरण एफ # में एक स्थिर सदस्य के रूप में 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