2010-02-27 7 views
5

पर एक सूची को कैसे पास करें, मेरी समस्या यह है कि मैंने एक वेब सेवा और एक विंडोज़ फॉर्म (अलग समाधान) बनाया है। मैंने एक सेवा संदर्भ का उपयोग करके फॉर्म ऐप में वेब सेवा जोड़ा, मैं वेब सेवा में कोई 'int' या 'स्ट्रिंग' पास नहीं कर सकता, लेकिन मैं int की एक सरणी या सूची <int> एक सेवा संदर्भ (सी #, वीएस -2008)

using System.Collections.Generic; 
using System.ComponentModel; 
using System.Linq; 
using System.Web.Services; 

namespace CalculateService 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [ToolboxItem(false)] 

    public class Service1 : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public int CalcluateSum(List<int> listInt) 
     { 
      int sum = listInt.Sum(); 
      return sum; 
     } 
    } 
} 

और ग्राहक कोड है::

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace CalculateForm 
{ 
    public partial class FormCalculate : Form 
    { 
     List<int> intArray = new List<int>(); 

     public FormCalculate() 
     { 
      InitializeComponent(); 
     } 

     private void btnAddNum_Click(object sender, EventArgs e) 
     { 
      intArray.Add(Convert.ToInt32(txtAddNum.Text)); 
      txtAddNum.Clear(); 
      listBoxAddNum.Items.Clear(); 
      for (int i = 0; i < intArray.Count; i++) 
      { 
       listBoxAddNum.Items.Add(intArray[i]); 
      } 
     } 

     private void btnCalculate_Click(object sender, EventArgs e) 
     { 
      CalculateForm.CalculateService.Service1SoapClient client = new CalculateForm.CalculateService.Service1SoapClient(); 
      int result = client.CalcluateSum(intArray); 
      txtResult.Text = Convert.ToString(result); 
     } 
    } 
} 

त्रुटि मैं हो रही है:

वेब सेवा कोड इस प्रकार है

तर्क '1': करने के लिए 'System.Collections.Generic.List' से परिवर्तित नहीं कर सकते 'CalculateForm.CalculateService.ArrayOfInt'

मुझे यकीन है कि यह कुछ आसान है और मैं Daft लगता है जब किसी को यह बताते हैं जाएगा हूँ:)

चीयर्स कार्ल

+0

मैं बस अपनी वेब विधि बदल दूंगा :-) int []। यह शायद अन्य वेब सेवा उपभोक्ताओं के जीवन को आसान बना देगा। – Robert

+0

मुझे पसंद है लेकिन जैसा कि यह coursework के लिए है, वे निर्दिष्ट करते हैं कि: एक नई एएसपीएक्स एसओएपी वेब सेवा (जैसा यूनिट 1 में चर्चा की गई है) बनाएं जो पूर्णांक के एक सूची की गणना की गणना करेगा और परिणाम लौटाएगा। मुझे नहीं पता कि अगर इसे वेब सेवा में 'int []' के रूप में पास करना संभव होगा, तो योग करने के लिए 'सूची ' में कनवर्ट करें, फिर 'int' को वापस करें, इस प्रकार विनिर्देश के साथ? – Carl

उत्तर

5

मुझे अंततः यह काम मिल गया !! :)

मैं इसे ToArray() विधि का उपयोग कर के बजाय List<int> पारित करने के लिए पाने में कामयाब रहे।

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 

namespace CalculateForm 
{ 
    public partial class FormCalculate : Form 
    { 
     List<int> listInt = new List<int>(); 

     public FormCalculate() 
     { 
      InitializeComponent(); 
     } 

     private void btnAddNum_Click(object sender, EventArgs e) 
     { 
      listInt.Add(Convert.ToInt32(txtAddNum.Text)); 
      txtAddNum.Clear(); 
      listBoxAddNum.Items.Clear(); 

      for (int i = 0; i < listInt.Count; i++) 
      { 
       listBoxAddNum.Items.Add(listInt[i]); 
      } 
     } 

     private void btnCalculate_Click(object sender, EventArgs e) 
     { 
      CalculateService.Service1SoapClient client = new CalculateService.Service1SoapClient(); 

      CalculateService.ArrayOfInt arrayOfInt = new CalculateService.ArrayOfInt(); 

      arrayOfInt.AddRange(listInt); 

      int result = client.CalcluateSum(arrayOfInt); 

      txtResult.Text = Convert.ToString(result); 
     } 
    } 
} 

और वेब सेवा कोड:

यहाँ ग्राहक कोड है, तो मूल रूप से सभी मैं करना था

using System.Collections.Generic; 
using System.ComponentModel; 
using System.Linq; 
using System.Web.Services; 

namespace CalculateService 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [ToolboxItem(false)] 

    public class Service1 : System.Web.Services.WebService 
    { 
     [WebMethod] 
     public int CalcluateSum(List<int> listInt) 
     { 
      int sum = listInt.Sum(); 
      return sum; 
     } 
    } 
} 

ग्राहक में CalculateService.ArrayOfInt का एक नया उदाहरण बनाते हैं, और जोड़ने था List<int> listInt से डेटा की रेंज तो वेब सेवा में arrayOfInt पास करें।

आपकी मदद के लिए चीयर्स हर किसी को, कोई संदेह नहीं मैं जल्द ही वापस हो जाएगा :)

6

डबल्यूएसडीएल सूचियाँ संभाल सकते हैं, तो यह किसी सरणी के बजाय का उपयोग करता है, रूपांतरण करने से पहले यह यह आपके सेवा विधि में गुजरता है। विधि को कॉल करने से पहले अपनी सूची में ToArray() को कॉल करें।

+1

आप मेरे नायक दोस्त हैं..मैंने आज एक घंटे सेवा वेबमाइड के पैरामीटर के रूप में एक सूची पास करने पर काम करने के लिए 6 घंटे बिताए और वहां आप ... धन्यवाद फिर से .. – Nathan

0

इस प्रयास करें:

client.CalcluateSum(intArray.ToArray()) 
0

यह सवाल this one के समान दिखता है। मैं कहूंगा कि आपको एक त्वरित स्थैतिक फ़ंक्शन लिखना होगा जो एक सूची में लेता है और गणना प्रकार को गणना करता है। गणना करें। CalculateService.ArrayOfInt। आपकी वेब सेवा ने इस प्रकार को उत्पन्न किया है, और ऐसा लगता है कि यह कम कुछ भी उम्मीद नहीं करता है। मैं इस व्यवहार से अपरिचित हूं क्योंकि मैं नियमित रूप से वेब सेवाओं में सूचियां पास करता हूं और मेरी वेब सेवाएं हमेशा रूपांतरण करने में कामयाब रही हैं। मेरे लिए TooArray()।

+0

मैंने अपने क्लाइंट ऐप में वेब सेवा को ' वेब सेवा 'की बजाय' सेवा संदर्भ 'और इसने मुझे सूची को ठीक करने की इजाजत दी, समस्या यह है कि यह coursework के लिए है और मुझे विश्वास है कि इसे' सेवा संदर्भ ' के रूप में जोड़ा जाना है I दूसरे प्रश्न से सुझाव और देखें कि मैं पर कैसे मिलता हूं – Carl

1

मैं इसे WCE3.0 एक्सटेंशन का उपयोग कर किया था। जब आप reference.cs फ़ाइल जेनरेट करते हैं, तो सिस्टम List<int> के बजाय int[] डालता है। reference.cs फ़ाइल में List<int> द्वारा आपको int[] को प्रतिस्थापित करना होगा।

सम्मान।

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