نقل قول: مشکل در XML RPC - Client
فایل XML کامل
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>632</name>
<value>
<struct>
<member>
<name>online_status</name>
<value>
<boolean>1</boolean>
</value>
</member>
<member>
<name>user_repr</name>
<value>
<string>*****</string>
</value>
</member>
<member>
<name>attrs</name>
<value>
<struct>
<member>
<name>normal_password</name>
<value>
<string>NORMAL-PASSWORD</string>
</value>
</member>
<member>
<name>normal_username</name>
<value>
<string>******</string>
</value>
</member>
<member>
<name>user_id</name>
<value>
<int>632</int>
</value>
</member>
</struct>
</value>
</member>
<member>
<name>basic_info</name>
<value>
<struct>
<member>
<name>status</name>
<value>
<string>Package</string>
</value>
</member>
<member>
<name>user_id</name>
<value>
<int>632</int>
</value>
</member>
<member>
<name>creation_date</name>
<value>
<string>2011-07-24 14:43</string>
</value>
</member>
<member>
<name>group_name</name>
<value>
<string>amoozesh-st</string>
</value>
</member>
<member>
<name>credit</name>
<value>
<double>1.0</double>
</value>
</member>
<member>
<name>deposit</name>
<value>
<double>0.0</double>
</value>
</member>
<member>
<name>isp_id</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>isp_name</name>
<value>
<string>Am**UnReg</string>
</value>
</member>
<member>
<name>group_id</name>
<value>
<int>52</int>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
البته این XML با قبلی فرق میکنه (یه تابع دیگه ایی)
توی این جواب هم مقدار 632 هر بار تغییر میکنه (معادل User Id) و بزرگترین مشکل خودم هم با همین بخشش هست
نقل قول: مشکل در XML RPC - Client
سلام.
برای انجام اینکار، میتونید بدین شکل عمل کنید:
XDocument doc = XDocument.Load("d:\\temp.xml");
IEnumerable<XElement> names = doc.XPathSelectElements("//methodResponse/params/param/value/struct/member/name");
foreach (XElement name in names)
{
string memberName = name.Value; //632
IEnumerable<XElement> members = name.Parent.XPathSelectElements("value/struct/member/name");
IEnumerable<XElement> attribNames = members.Where(el => el.Value == "attrs").SingleOrDefault().XPathSelectElements ("../value/struct/member/name");
IEnumerable<XElement> basicAttribs = members.Where(el => el.Value == "basic_info").SingleOrDefault().XPathSelectElement s("../value/struct/member/name");
var res = new
{
IsOnline = members.Where(el => el.Value == "online_status").SingleOrDefault().XPathSelectElem ent("../value/boolean").Value != "0",
UserRepr = members.Where(el => el.Value == "user_repr").SingleOrDefault().XPathSelectElement( "../value/string").Value,
NormalPassword = attribNames.Where(el => el.Value == "normal_password").SingleOrDefault().XPathSelectEl ement("../value/string").Value,
NormalUsername = attribNames.Where(el => el.Value == "normal_username").SingleOrDefault().XPathSelectEl ement("../value/string").Value,
UserId = int.Parse(attribNames.Where(el => el.Value == "user_id").SingleOrDefault().XPathSelectElement(". ./value/int").Value),
Status = basicAttribs.Where(el => el.Value == "status").SingleOrDefault().XPathSelectElement ("../value/string").Value,
CreationDate = DateTime.Parse(basicAttribs.Where(el => el.Value == "creation_date").SingleOrDefault().XPathSelectElem ent("../value/string").Value)
};
}
که در اون فرض کردم XML در فایلی در دایرکتوری ی d:\\ تحت نام temp.xml ذخیره شده. اگر با بخشی از کد مشکل دارید و متوجه نشدید بفرمایید تا توضیح بدم. در هر حال، کد فوق اطلاعات رو از XML میخونه، و اونها رو تحت Anonymous Object ای به اسم res نگه میداره....
موفق باشید.
نقل قول: مشکل در XML RPC - Client
من با فایل روی این کار نمیکنم این اطلاعات رو از وب سرویس میخونم از یک وب سرویس XML RPC و همونجور که گفتم نمیدونم اون قسمت User Id رو چه جوری حل کنم
وب سرویس با Python نوشته شده و همون طور که در XML بالا میببینید user Id که اینجا ۶۳۲ هست به عنوان در برگیرنده تمام عناصر استفاده شده من نمیدونم چه جوری به سیستم بگم که اطلاعات این قسمت رو بگیر و من تا اینجای کار رو از طریق نوشتن یک Structure انجام دادم.
اگه نیاره تا کد هایی که نوشتم رو بزرام؟
نقل قول: مشکل در XML RPC - Client
سلام.
نقل قول:
نوشته شده توسط
narsic
من با فایل روی این کار نمیکنم این اطلاعات رو از وب سرویس میخونم از یک وب سرویس XML RPC و همونجور که گفتم نمیدونم اون قسمت User Id رو چه جوری حل کنم
شما چطوری با این XML RPC Service کار می کنید؟ منظورم اینه که Client شما، چطوری و بر اساس چه مکانیزمی اطلاعات مورد نظر رو از Web Service میگیره؟ آیا از XML-RPC .NET استفاده کرده اید؟
نقل قول:
نوشته شده توسط
narsic
وب سرویس با Python نوشته شده و همون طور که در XML بالا میببینید user Id که اینجا ۶۳۲ هست به عنوان در برگیرنده تمام عناصر استفاده شده من نمیدونم چه جوری به سیستم بگم که اطلاعات این قسمت رو بگیر و من تا اینجای کار رو از طریق نوشتن یک Structure انجام دادم. اگه نیاره تا کد هایی که نوشتم رو بزرام؟
بله، اگر کدها رو بذارید ببینم، متوجه میشم که چطوری دارید با اون سرویس ارتباط برقرار می کنید. چون بطور کلی، نوشتن XML-RPC Client/Server ساز و کاری داره (مثل SOAP) و باید بر اساس اون ساز و کارها Client و Server با هم ارتباط برقرار کنن.
موفق باشید.
نقل قول: مشکل در XML RPC - Client
این کدها برای فراخوانی همون نتیجه بالا هستن (XML پست قبلی از این تابع بدست اومده)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using CookComputing.XmlRpc;
using System.Data;
[WebService(Namespace = "192.168.10.76")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService {
private XmlRpcStruct _arguments;
public Service() {
this._arguments = new XmlRpcStruct();
this._arguments.Add("auth_name", "system");// Web Service User Name
this._arguments.Add("auth_pass", "sys");// Web Service User Pass
this._arguments.Add("auth_type", "ADMIN");// Web Service User Type
}
[WebMethod]
public bool CheckUser(string username, string password) {
try {
Isend_recv proxy = (Isend_recv)XmlRpcProxyGen.Create(typeof(Isend_rec v));
XmlRpcStruct arguments = this._arguments;// Create new arguments connection
arguments.Add("login_auth_type", "NORMAL_USER");
arguments.Add("login_auth_name", username);
arguments.Add("login_auth_pass", password);
return proxy.login(arguments);
}
catch (Exception ex) {
return false;
}
}
[WebMethod]
public UserInfo getUserInfoByUserId(string userid)
{
try
{
Isend_recv proxy = (Isend_recv)XmlRpcProxyGen.Create(typeof(Isend_rec v));
XmlRpcStruct arguments = this._arguments;// Create new arguments connection
arguments.Add("user_id", userid);
UserInfo ret = proxy.getUserInfo(arguments);
return (ret);
}
catch (Exception ex)
{
throw ex;
}
}
}
[XmlRpcUrl("http://192.168.10.76:1235/")]
public interface Isend_recv : IXmlRpcProxy {
[XmlRpcMethod("user.getUserInfo")]
UserInfo getUserInfo(XmlRpcStruct arguments);
[XmlRpcMethod("login.login")]
bool login(XmlRpcStruct arguments);
}
[XmlRpcMissingMapping(MappingAction.Ignore)]
public struct UserInfo
{
public bool online_status;
public string user_repr;
public UserInfoAttrs attrs;
}
[XmlRpcMissingMapping(MappingAction.Ignore)]
public struct UserInfoAttrs
{
public string normal_password;
public string normal_username;
public int user_id;
public string real_first_login;
}