2010-11-23 9 views
7

हाउडी, येल में एक आमंत्रण विधि के लिए एक पैरामीटर के रूप में एक इकाई का उपयोग करने के लिए वैकल्पिक! StackOverflow पर पहला सवाल! :-)डब्ल्यूसीएफ आरआईए सेवाओं

तो यहां परिदृश्य है: हम सिल्वरलाइट 4 के साथ एक वेब ऐप पर काम कर रहे हैं और वेब सेवा के लिए डब्ल्यूसीएफ आरआईए सेवा 1.0 एसपी 1 बीटा का उपयोग कर रहे हैं। मेरे पास एंटिटी फ्रेमवर्क डिज़ाइनर में मेरी संस्थाएं हैं, लेकिन मैं कक्षाएं उत्पन्न करने के लिए थोड़ा-संशोधित एडीओ.NET सी # पॉको एंटीटी जेनरेटर टेम्पलेट का उपयोग कर रहा हूं।

मैं क्या करना चाहते हैं क्या है निम्न हस्ताक्षर के साथ एक डोमेन सेवा के अंदर एक विधि है:

[EnableClientAccess] 
public class ResultService : DomainService 
{ 
    [Invoke] 
    public SerializableResult CalculateResult(EntityOne e1, EntityTwo e2); 
} 

मैं, अन्य सेवाओं में प्रश्नों के माध्यम से दोनों EntityOne और EntityTwo लौट रहा ग्राहक के लिए तो जैसे:

[EnableClientAccess] 
public class EntityOneService : DomainService 
{ 
    public IQueryable<EntityOne> GetEntityOnes(); 
} 

[EnableClientAccess] 
public class EntityOneService : DomainService 
{ 
    public IQueryable<EntityTwo> GetEntityTwos(); 
} 

उन वर्गों सफलतापूर्वक सिल्वरलाइट परियोजना में उत्पन्न किया जा रहा है। SerializableResult नहीं एक कुंजी है।

जब मैं संकलन करने का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिलती है: "ऑपरेशन नाम 'गणना गणना' आवश्यक हस्ताक्षर के अनुरूप नहीं है। पैरामीटर प्रकार एक इकाई या जटिल प्रकार, जटिल प्रकारों का संग्रह होना चाहिए, या इनमें से एक पूर्वनिर्धारित धारावाहिक प्रकार। "

मेरे शोध में, मुझे मिली सबसे उपयोगी जानकारी this post by Jeff Handley की टिप्पणियों में थी।

ध्यान दें

, पीटर एक टिप्पणी में पूछा:

I get an 'does not conform to the required signature ...' compile error if my complex object has an [Key] Attribute. When I remove this attribute I can use the object as parameter for an Invoke operation.

जेफ की प्रतिक्रिया:

This is by design. Complex objects cannot have Key properties. If you have a Key the class gets treated as an Entity.

तो यह लग रहा है जैसे कि किसी भी आगे के प्रयासों काम करने के लिए व्यर्थ हो जाएगा मेरी विधि प्राप्त करने की कोशिश करने के लिए। हालांकि, मैं सोच रहा था कि क्या कोई और इस समस्या से आया है, और उन्होंने इसे हल करने के लिए क्या किया।

बहुत बहुत धन्यवाद!

+0

क्या सीरियलज़ेबल रिजल्ट क्लाइंट पर उत्पन्न हो रहा है? मुझे आश्चर्य है कि यह हमारी कॉम्प्लेक्स टाइप पहचान में एक बग है, जहां हमें एक एनालिट परिणाम के रूप में उपयोग किए जाने से पहले एक इकाई पर एक संपत्ति के रूप में सर्फिज़ेबल रीसेट प्रकार की आवश्यकता हो सकती है। –

+0

यदि मैं कोशिश करता हूं: "[Invoke] public SerializableResult CalculateResult();", क्लाइंट पर उत्पन्न SerializableResult _is_। –

+0

फिर यह आपकी संस्थाओं के आकार के साथ कुछ लगता है। EntityOne और EntityTwo Entity से प्राप्त करने के रूप में उत्पन्न होते हैं? –

उत्तर

6

श्री जेफ Handley और जवाब के लिए श्री दिनेश कुलकर्णी (Twitter के माध्यम से) के लिए बहुत धन्यवाद।

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

"Each domain service needs to be able to stand on its own."

दो डमी क्वेरी तरीकों (उदाहरण के लिए जेफ के जवाब देखें) को जोड़ कर, मैं अपने कोड संकलन करने में सक्षम था है।

8

मेरे पास निम्नलिखित है और यह मेरे लिए काम करता है।

namespace BusinessApplication2.Web 
{ 
    using System.ComponentModel.DataAnnotations; 
    using System.Linq; 
    using System.ServiceModel.DomainServices.Hosting; 
    using System.ServiceModel.DomainServices.Server; 

    [EnableClientAccess()] 
    public class DomainService1 : DomainService 
    { 
     public IQueryable<EntityOne> GetEntityOnes() 
     { 
      return null; 
     } 

     public IQueryable<EntityTwo> GetEntityTwos() 
     { 
      return null; 
     } 

     [Invoke] 
     public SerializableResult GetSerializableResult(EntityOne one, EntityTwo two) 
     { 
      return new SerializableResult() { Result = "It woooooorrrked!" }; 
     } 
    } 

    public class EntityOne 
    { 
     [Key] 
     public int Id { get; set; } 
    } 

    public class EntityTwo 
    { 
     [Key] 
     public int Id { get; set; } 
    } 

    public class SerializableResult 
    { 
     public string Result { get; set; } 
    } 
} 
+0

इसलिए मैंने डोमेन सेवा में दो डमी क्वेरी विधियों को जोड़ा (IQueryable और IQueryable ) _alongside_ गणना गणना विधि, और अब संकलित! यह मूल तरीके संकलित क्यों नहीं करेगा? –

+0

यह हमारी "साझा संस्थाओं" सुविधा में एक बग हो सकता है जो आपको डोमेन सेवाओं में इकाई प्रकारों के साथ काम करने की अनुमति देता है। मैं इसे फाइल करूंगा और आपको बता दूंगा कि यह डिज़ाइन या वास्तव में एक बग था या नहीं। –

+0

बहुत बहुत धन्यवाद! –

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