2009-11-09 17 views
6

पर एक SSL प्रमाणपत्र बाध्यकारी मैं एक स्वयं-होस्टेड डब्ल्यूसीएफ सेवा पर काम कर रहा हूं जिसके लिए एन्क्रिप्टेड संचार एक विकल्प है। here वर्णित अनुसार प्रमाण पत्र पहले ही बंदरगाह से जुड़ा हुआ है जब सब कुछ ठीक काम करता है।किसी पोर्ट को प्रोग्रामेटिक रूप से

हालांकि, मैं उपयोगकर्ता को कमांड लाइन उपकरण चलाने के लिए कहने से बचना चाहता हूं। क्या बाध्यकारी प्रोग्रामेटिक तरीके से किया जा सकता है? शायद डब्लूएमआई का उपयोग कर रहे हैं?

उत्तर

4

मुझे विश्वास है कि एक HTTP.SYS नेमस्पेस आरक्षण बनाने का तरीका HttpSetServiceConfiguration() अप्रबंधित API के माध्यम से है; इसलिए आपको इसके लिए कुछ पी/आमंत्रण की आवश्यकता होगी। कुछ नमूना कोड है जो one of कीथ ब्राउन के एमएसडीएन कॉलम में उपयोगी हो सकता है।

+0

मैं इसे वोट दे रहा हूं क्योंकि टॉमस पहले थे और हमने मूल रूप से वही बात कहा। :) –

+0

केन ब्राउन का आलेख लिंक अब मर चुका है। हालांकि इसे यहां प्राप्त कर सकते हैं - http://web.archive.org/web/20121214083056/http://msdn.microsoft.com/en-us/magazine/cc163531.aspx – tjmoore

1

हां, लेकिन आपको the HTTP API स्वयं का उपयोग करना होगा जो वर्तमान में कोई .NET wrapper नहीं है, इसलिए आपको पी/Invoke का उपयोग करना होगा। विशेष रूप से मुझे लगता है कि आप HttpServiceConfigSSLCertInfo कॉन्फ़िगरेशन आईडी के साथ HttpSetServiceConfiguration ढूंढ रहे हैं।

2

MSDN documentation, कीथ ब्राउन का MSDN column, और pinvoke.net मुझे वहां से सबसे अधिक रास्ता मिला। लेकिन HTTP_SERVICE_CONFIG_SSL_KEY सही में PSOCKADDR प्राप्त करना मुश्किल था। मुझे Beej's Guide to Network Programming यह पता लगाने में बहुत उपयोगी पाया गया कि जैसा दिखना चाहिए। मैं .NET सॉकेट एड्रेस का उपयोग करने में सक्षम था और फिर बाइट्स को एक सरणी में कॉपी करता था जिसे मार्शल किया जा सकता था।

// serialize the endpoint to a SocketAddress and create an array to hold the values. Pin the array. 
SocketAddress socketAddress = ipEndPoint.Serialize(); 
byte[] socketBytes = new byte[socketAddress.Size]; 
GCHandle handleSocketAddress = GCHandle.Alloc(socketBytes, GCHandleType.Pinned); 

// Should copy the first 16 bytes (the SocketAddress has a 32 byte buffer, the size will only be 16, which is what the SOCKADDR accepts 
for (int i = 0; i < socketAddress.Size; ++i) 
{ 
    socketBytes[i] = socketAddress[i]; 
} 
संबंधित मुद्दे