2013-08-02 7 views
15

मुझे सिग्नलआर डेवलपर्स से कुछ दिशानिर्देशों की आवश्यकता होगी हब विधि के पैरामीटर क्रमबद्धता को ट्विक करने का सबसे अच्छा तरीका क्या है।सिग्नलआर हब विधि पैरामीटर क्रमबद्धता

मैंने अपनी परियोजना को डब्ल्यूसीएफ मतदान डुप्लेक्स (सिल्वरलाइट 5 - एएसपी.नेट 4.5) से सिग्नल (1.1.2) में माइग्रेट करना शुरू कर दिया। संदेश (डेटा अनुबंध) इंटरफेस पर आधारित पॉलिमॉर्फिक है। (इमेजेज की तरह, संदेश: इमेजेज इत्यादि - कक्षाओं द्वारा लागू इंटरफ़ेस का वास्तव में पदानुक्रम है लेकिन यह प्रश्न के लिए बहुत महत्वपूर्ण नहीं है)। (मैं जानता हूँ कि बहुरूपी वस्तुओं ग्राहकों के लिए अच्छा नहीं हैं, लेकिन ग्राहक JSON के रूप में यह संभाल लेंगे और वस्तुओं के लिए मानचित्रण केवल सर्वर साइड या क्लाइंट पर किया जाता है अगर यह नेट/सिल्वरलाइट है)

हब मैं इस तरह विधि परिभाषित पर :/Json.NET का उपयोग कर deserialized

public void SendMessage(IMessage data) { .. } 

मैं कस्टम JsonConverters बनाया है और सत्यापित संदेशों धारावाहिक जा सकता है। फिर मैंने उचित सेटिंग्स के साथ निर्भरता रेसोलवर में जेसननेट सेरियलाइज़र को बदल दिया। इसी तरह सिल्वरलाइट क्लाइंट पक्ष पर। अब तक सब ठीक है।

लेकिन जब मैंने क्लाइंट से सर्वर पर संदेश भेजा (संदेश जेएसओएन को सही ढंग से क्रमबद्ध किया गया - फिडलर में सत्यापित), सर्वर ने त्रुटि लौटा दी कि पैरामीटर को deserialized नहीं किया जा सकता है। डीबगर की मदद से मुझे सिग्नलआर में एक बग मिला (पैरामीटर के deserialization के लिए जिम्मेदार JRawValue वर्ग आंतरिक रूप से प्रदान की गई अनदेखी JsonSerializer का अपना उदाहरण बनाता है)।

var settings = new JsonSerializerSettings 
{ 
    MaxDepth = 20 
}; 
var serializer = JsonSerializer.Create(settings); 
return serializer.Deserialize(jsonReader, type); 

जगह

var serializer = GlobalHost.DependencyResolver.Resolve<IJsonSerializer>(); 
return serializer.Parse(jsonReader, type); 

साथ द्वारा काफी आसान ठीक लग रहा था, लेकिन मैं यह भी पाया कि इंटरफेस IJsonSerializer SignalR के भविष्य के संस्करण में हटाया जा रहा है। मुझे मूल रूप से, एचयूबी विधि से या तो कच्चे JSON (या बाइट स्ट्रीम) प्राप्त करना है, इसलिए मैं इसे स्वयं से या कन्वर्टर्स को निर्दिष्ट करके धारावाहिक को ट्विक करने की संभावना को हटा सकता हूं।

अभी के लिए मैं समाप्त हुआ JObject पैरामीटर प्रकार के साथ विधि को परिभाषित:

public void SendMessage(JObject data) 

JObject.ToObject<IMessage>(JsonSerializer) 

विधि का उपयोग कर डेटा के मैनुअल अक्रमांकन द्वारा पीछा किया। लेकिन मैं serializer को अनुकूलित करना और हब विधि पर प्रकार/इंटरफ़ेस रखना पसंद करूंगा। अगले सिग्नलआर के डिजाइन के संबंध में इसे करने का "सही तरीका" क्या है?

मुझे अपने कोड से क्लाइंट कच्चे JSON को वापस भेजने की संभावना भी उपयोगी होती है, यानी कि ऑब्जेक्ट को फिर से सिग्नल द्वारा क्रमबद्ध नहीं किया जाता है। मैं इसे कैसे प्राप्त कर सकता हूं?

+0

अच्छा सवाल किसी भी तरह के बारे में पता नहीं है। कोई जवाब देखने में दुखी है। मैं पॉलिमॉर्फिक संदेश अनुबंधों को लागू करने में भी रूचि रखता हूं। –

+0

क्या यह प्रश्न अभी भी 2.x के साथ प्रासंगिक है? 2.x के साथ, आप 'app.MapSignalR (config) 'कॉल के लिए' HubConfiguration' में अपडेट किए गए 'निर्भरता रीसोलवर' में पास करने में सक्षम होना चाहिए –

उत्तर

0

यदि आप हब एपीआई के बजाय कनेक्शन एपीआई का उपयोग करते हैं, तो आप ऑनरसीव ईवेंट को संभाल सकते हैं और कच्चे JSON (स्ट्रिंग) के रूप में अनुरोध प्राप्त कर सकते हैं। this example पर एक नज़र डालें। हब एपीआई का उपयोग कर ग्राहकों को पूर्व धारावाहिक डेटा भेजने के लिए

क्षमता 2.x संस्करण में जोड़ा गया था और मुझे लगता है कि 1.x में (github issue देखें) करने के लिए

संबंधित मुद्दे