/ / ASMX वेब सेवा - गुण के साथ उपयोगकर्ता परिभाषित वर्ग लौटें - asp.net, वेब-सेवाओं, asmx, उपयोगकर्ता-परिभाषित और प्रकार

ASMX वेब सेवा - गुण के साथ उपयोगकर्ता परिभाषित वर्ग लौटें - asp.net, वेब-सेवाओं, asmx, उपयोगकर्ता-परिभाषित-प्रकार

अरे, मैं वेब विधि से एक उपयोगकर्ता परिभाषित वर्ग को वापस करने की कोशिश कर रहा हूं। वर्ग में गुण और / या विधियाँ हैं। निम्नलिखित वेब विधि को देखते हुए:

[WebMethod]
public List<MenuItem> GetMenu()
{
List<MenuItem> menuItemList = new List<MenuItem>();
menuItemList.Add(new MenuItem());
menuItemList.Add(new MenuItem());
menuItemList.Add(new MenuItem());
return menuItemList;
}

अब, मान लीजिए कि नए बनाए गए कंसोल एप्लिकेशन में वेब संदर्भ जोड़कर इस वेब सेवा का उपयोग किया जाता है। इसका परीक्षण करने के लिए निम्न कोड का उपयोग किया जाता है:

public void TestGetMenu()
{
MenuService service = new MenuService.MenuService();
service.MenuItem[] menuItemList = service.GetMenu();
for (int i = 0; i < menuItemList.Length; i++)
{
Console.WriteLine(menuItemList[i].name);
}
Console.ReadKey();
}

सबसे पहले, यह काम नहीं करता है अगर MenuItemवर्ग में गुण होते हैं ... इसके अलावा, यदि MenuItem वर्ग में वेब मेथड कॉल करने की विधि नहीं है, लेकिन विफल जेनरेट वर्ग में यह विधि नहीं है .. उदाहरण के लिए: menuItemList [i] .getName () करता है। मौजूद नहीं है। क्यों? मैं क्या याद कर रहा हूँ?

//This works
public class MenuItem
{
public string name;
public MenuItem()
{
name = "pizza";
}
}



//This crashes / doesnt work
public class MenuItem
{
private string name;
public MenuItem()
{
name = "pizza";
}
public string Name
{
get { return name; }
set { name = value; }
}
}



//This successfully calls web method, but the method does not exist during test
public class MenuItem
{
private string name;
public MenuItem()
{
name = "pizza";
}
public string getName()
{
return name;
}
}

उत्तर:

उत्तर № 1 के लिए 6

यह तभी काम करेगा जब वर्ग क्रमबद्ध हो, जिसका अर्थ आम तौर पर सार्वजनिक क्षेत्र और संपत्तियों से है, यही कारण है कि आपका MenuItem विफल हो जाएगा क्योंकि आपकी client साइड को पता नहीं है कि MenuItem वर्ग का निर्माण ठीक से कैसे किया जाए।

इसे इस्तेमाल करे:

[Serializable]
public class MenuItem
{
private string name;

public MenuItem()
{
name = "pizza";
}

public string Name
{
get {
return name;
}
set {
name = value;
}
}

}

जवाब के लिए 0 № 2
  1. यदि मुझे सही याद है तो निजी संपत्तियों को ग्राहक को नहीं भेजा जाता है।
  2. क्लाइंट पर तरीके उत्पन्न नहीं किए जा सकते। सर्वर पर कुछ संसाधनों का उपयोग करने वाली एक विधि क्या है? 2 ए। इसके चारों ओर काम करने के लिए, आप कुछ तरीकों को फिर से लागू करने के लिए आंशिक कक्षाओं का उपयोग कर सकते हैं।