WebSocketAccept क्या है?
WebSocketAccept
एक using alias
उदाहरण:
...
using Foo.Bar
using MyBar = Fee.Bar
...
यहाँ हम 2 अलग नामस्थान से बार प्रयोग कर रहे हैं, लेकिन हम 'MyBar
' के साथ 2 एक उर्फ तो हम दोनों के बीच अंतर कर सकते हैं।
वेबसाकेट एसेप्ट के रूप में उपनाम का उपयोग क्यों करें?
इस मामले में उपनाम सिर्फ एक सुविधा है, ताकि आपको पूरी चीज टाइप करने की आवश्यकता न हो, जिसका अर्थ है कि इसका उपयोग करते समय पूरा नाम लिखने के बजाय, आप इसके बजाय उपनाम का उपयोग कर सकते हैं।
समझौता WebSocketAccept
अगर हम देखने के करीब हम देखते हैं कि प्रकार है:
Action<A, B>
इसका मतलब यह है कि यह मूलतः एक समारोह है कि वापस नहीं करता है और 2 तर्क लेता है, सी # लैम्ब्डा में है:
(A, B) => { }
हम देखते हैं कि पहला तर्क (ए) है: IDictionary<string, object>
, जिसे ओविन पर्यावरण भी कहा जाता है।
दूसरा तर्क है (बी) है: Func<C, D>
जिसका अर्थ है कि यह एक ऐसा कार्य है जो C
लेता है और D
देता है। सी # लैम्ब्डा में:
(C) => { return D; }
हम तो 2 तर्क (बी) के 1 तर्क (सी) में गोता लगाने की जरूरत है। और हम देखते हैं कि यह ओविन पर्यावरण लेता है और Task
देता है।
क्या स्वीकार है?
accept
IOwinContext
से पैरामीटर निकालने का प्रयास करता है और उन्हें WebSocketAccept
प्रकार पर मानचित्रित करता है।
यदि यह उन्हें निकाला नहीं जा सकता है तो यह null
है और हम अगले मध्यवर्ती पर आगे बढ़ते हैं।
अन्यथा यह एक वेबसाइकिल अनुरोध था और हम उस फ़ंक्शन को कॉल करते हैं जो 2 पैरामीटर (WebSocketAccept
) लेता है, जैसा कि हमने ऊपर चर्चा की है (Action<A, B>
)।
पहला पैरामीटर एक सामान्य शब्दकोश है, जिसमें वेबस्केट स्वीकार पैरामीटर शामिल हैं।
दूसरा पैरामीटर एक फ़ंक्शन है जो एक शब्दकोश लेता है और एक कार्य देता है।
यह फ़ंक्शन किसी और द्वारा बुलाया जाता है, कोड क्या करता है, कॉलर के साथ कॉलबैक फ़ंक्शन पास करता है।
कॉलर फिर सही तर्क के साथ फ़ंक्शन को कॉल करता है। क्योंकि कॉलर फ़ंक्शन के हस्ताक्षर को जानता है। वेबसाइकिल कनेक्शन अनुरोध को स्वीकार करने के बाद फ़ंक्शन को कॉल किया जाता है। इसलिए टिप्पणी कॉलबैक।
क्या होगा यदि हम इसे पहचानने के बाद पाइपलाइन को आगे ले जाना चाहते हैं तो यह एक वेब सॉकेट अनुरोध है?
उदाहरण में
खैर, कॉलबैक फ़ंक्शन WebSocketEcho
है, लेकिन अनिवार्य रूप से आप किसी भी समारोह प्रेषित कर सकता है, इस बात का समारोह हस्ताक्षर को संतुष्ट करता है:
Task MyCallbackFunction(IDictionary<string, object> context)
{
// Do something
return Task.FromResult(0);
}
टेकअवे कि आप समारोह फोन नहीं है, फ़ंक्शन आपके लिए बुलाया जाता है। आप निर्दिष्ट करते हैं कि वेब सॉकेट अनुरोध कनेक्शन पर बातचीत करने के बाद, आप तय करते हैं कि क्या होता है।
WebSocketEcho
समारोह हर ग्राहक के लिए एक बार कहा जाता है, और जब तक ग्राहक कनेक्शन बंद करने के लिए चुनता लूप है। इस बीच यह जो कुछ भी प्राप्त करता है उसे वापस गूंजता है।
अस्वीकरण: मैं भी अपने सिर को वेब सॉकेट और ओविन के चारों ओर लपेटने की कोशिश कर रहा हूं, लेकिन मैं अपने निष्कर्षों को जन्म के लिए साझा करना चाहता था, क्योंकि किसी ने आपके प्रश्न का उत्तर नहीं दिया था। मैं किसी भी सुधार का स्वागत करता हूँ।
संपादित
मैं अपने खुद के प्रयोग के साथ देखा, कि अगर आप कॉलबैक फ़ंक्शन से लौटने कि websocketContext
कनेक्शन Abort
एड किया जाएगा। जिसका अर्थ है आप नहीं भेज/अगर आप कॉलबैक समाप्त होने के बाद चारों ओर websocketContext
पारित कनेक्शन पर प्राप्त कर सकते हैं।
अद्यतन
पिछली बार मैंने एक Windows 2008 R2 आईआईएस 7.5 सर्वर पर इस का उपयोग करने के मैं WebSocket काम करने के लिए नहीं मिल सका की कोशिश की। इसके बाद: https://stackoverflow.com/a/14130152/1640121 - आईआईएस 7.5 सर्वर websockets का समर्थन नहीं करता है।
इसका मतलब है कि यदि आपके आवेदन आईआईएस 7.5 में होस्ट किया गया है यह WebSockets करने में सक्षम नहीं होगा।
- एक अलग आवेदन उपयोग करें, उदा:
तो मैं एक संभव समाधान के बारे में सोचा एक सेवा कार्यक्रम (आईआईएस के बाहर) जो वेबसाइकिल अनुरोधों को संभालता है।
- सेवा आवेदन
करने के लिए अनुरोध यह मेरे लिए बहुत बोझिल महसूस किया है, जो मुझे एक तरफ अभी के लिए एक WebSocket को लागू कर दिया बनाया मैप करने के लिए एक रिवर्स प्रॉक्सी का उपयोग करें ...
मैं 400 गलत अनुरोध हो रही है एक ही कोड की कोशिश करते समय। – Jigar