نمایش نتایج 1 تا 6 از 6

نام تاپیک: مشکل در XML RPC - Client

  1. #1
    کاربر دائمی آواتار narsic
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    دهکده جهانی
    سن
    35
    پست
    1,020

    مشکل در XML RPC - Client

    دوستان من در کار با یک XML RPC server مشکل دارم البته در نمایش مقدار های بازگشتی XML نمونه ایی که این سرور بر میگردونه به شکل زیر هستش:
    Server**UnReg**P/0.3 Python/2.7.2
    Date: Thu, 08 Mar 2012 09:21:12 GMT
    Content-type: text/xml
    Content-length: 2952

    <?xml version='1.0'?>
    <methodResponse>
    <params>
    <param>
    <value><struct>
    <member>
    <name>1</name>
    <value><struct>
    <member>
    <name>online_status</name>
    <value><boolean>0</boolean></value>
    </member>
    <member>
    <name>user_repr</name>
    <value><string>test_user</string></value>
    </member>
    <member>
    <name>attrs</name>
    <value><struct>
    <member>
    <name>comment</name>
    <value><string>طھط³طھ</string></value>
    </member>
    <member>
    <name>real_first_login</name>
    <value><string>2008-12-04 16:18</string></value>
    </member>
    <member>
    <name>limit_mac</name>
    <value><string>00:23:8B:B6:64:FD</string></value>
    </member>
    <member>
    <name>normal_password</name>
    <value><string>password_foobar123</string></value>
    </member>
    <member>
    <name>limit_station_ip_bind_on_login</name>
    <value><string></string></value>
    </member>
    <member>
    <name>limit_mac_bind_on_login</name>
    <value><string></string></value>
    </member>
    <member>
    <name>limit_caller_id_bind_on_login</name>
    <value><string></string></value>
    </member>
    <member>
    <name>allow_recharge_by_voucher</name>
    <value><string></string></value>
    </member>
    <member>
    <name>normal_username</name>
    <value><string>test_user</string></value>
    </member>
    <member>
    <name>user_id</name>
    <value><int>1</int></value>
    </member>
    <member>
    <name>name</name>
    <value><string>طھط³طھ</string></value>
    </member>
    <member>
    <name>is_deposit_transferer</name>
    <

    البته این قسمتی از کدش هست (بقیش هم شبیه همینه)
    من برای کار باهاش یک Structure نوشتم اما مشکلی که دارم با قسمت های اولیشه
    این قسمت:
    <methodResponse>
    <params>
    <param>
    <value><struct>
    <member>
    <name>1</name>

    عدد 1 در حقیقت ID هست، و برای هر کاربر عوض میشه.
    حالا دوستان برای این مشکل چه پیشنهادی دارید؟

  2. #2
    کاربر دائمی آواتار narsic
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    دهکده جهانی
    سن
    35
    پست
    1,020

    نقل قول: مشکل در 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) و بزرگترین مشکل خودم هم با همین بخشش هست
    آخرین ویرایش به وسیله mehdi.mousavi : چهارشنبه 24 اسفند 1390 در 13:13 عصر دلیل: Decorate نمودن XML

  3. #3

    نقل قول: مشکل در 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 نگه میداره....

    موفق باشید.

  4. #4
    کاربر دائمی آواتار narsic
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    دهکده جهانی
    سن
    35
    پست
    1,020

    نقل قول: مشکل در XML RPC - Client

    من با فایل روی این کار نمیکنم این اطلاعات رو از وب سرویس میخونم از یک وب سرویس XML RPC و همونجور که گفتم نمیدونم اون قسمت User Id رو چه جوری حل کنم
    وب سرویس با Python نوشته شده و همون طور که در XML بالا میببینید user Id که اینجا ۶۳۲ هست به عنوان در برگیرنده تمام عناصر استفاده شده من نمیدونم چه جوری به سیستم بگم که اطلاعات این قسمت رو بگیر و من تا اینجای کار رو از طریق نوشتن یک Structure انجام دادم.
    اگه نیاره تا کد هایی که نوشتم رو بزرام؟

  5. #5

    نقل قول: مشکل در 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 با هم ارتباط برقرار کنن.

    موفق باشید.

  6. #6
    کاربر دائمی آواتار narsic
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    دهکده جهانی
    سن
    35
    پست
    1,020

    نقل قول: مشکل در 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;
    }

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •