سؤال

لديّ قلق في تمرير كائنات معقدة/أي أنواع أخرى: لأنني دائمًا أحصل على طلب سيء ... قصاصة رمز أدناه:

خدمة:

[OperationContract]
[WebInvoke(UriTemplate = "saveXML/", Method="POST", BodyStyle= WebMessageBodyStyle.Bare)]
bool saveXML(XElement xmlString)
{
       return true;
}

=========

عميل:

private HttpUrlEncodedForm frm = new HttpUrlEncodedForm();

frm.Add("CustomerCode", "123");
frm.Add("CustomerName", "Joseph");
frm.Add("Address", "4th Street Washington Ave. New York");
frm.Add("Country", "United States of America");

using (HttpResponseMessage response = m_RestHttpClient.Post("saveXML/", frm.CreateHttpContent()))
{
   response.EnsureStatusIsSuccessful();
}

أو جربته بهذه الطريقة:

var request = new XDocument(
              new XElement("Customer",
              new XElement("CustomerCode", "123"),
              new XElement("CustomerName", "Joseph"),
              new XElement("Address", "4th Street Washington Ave. New York"),
              new XElement("Country", "United States of America")));

 frm.Add("body", request.ToString());

.. على الطرق التي لم تنجح ... هذه مجرد عينة أريد استخدام أنواع معقدة لأنني سأتمرر على معلمات 50 على الأقل ... أو إذا كان لديك أي اقتراحات أخرى ، فلا تتردد في اقتراحها.

شكرًا لك

مع أطيب التحيات ، رافي

هل كانت مفيدة؟

المحلول 2

خدمة:

[OperationContract]
[WebInvoke(Method = "POST",BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "Upload", ResponseFormat= WebMessageFormat.Xml, RequestFormat= WebMessageFormat.Xml)]
public void Upload(Stream data)
{
    StreamReader reader = new StreamReader(data);
    String res = reader.ReadToEnd();
}

=========

عميل:

private HttpClient m_RestHttpClient = new HttpClient("http://localhost:17471/CustomerService/");


var form = new HttpUrlEncodedForm();
form.Add("CustomerCode", txtCustomerCode.Text);
form.Add("CustomerName", txtCustomerName.Text);
form.Add("ContactName", txtContactName.Text);
form.Add("Country", txtCountry.Text);
form.Add("PostalCode", txtPostalCode.Text);
form.Add("ClassTemplate", txtClassTemplate.Text); 
form.Add("BusinessType", cmbBusinessType.Text);
form.Add("IsProspect", cmbIsProspect.Text);

using (HttpResponseMessage response = m_RestHttpClient.Post("Upload", frm.CreateHttpContent()))
{
    response.EnsureStatusIsSuccessful();
}

===============================

إخراج الملف النصي الذي تم كتابته (بالمناسبة ليس له حد على الإطلاق: يمكنني تمرير أكبر عدد ممكن من المعلمات كما أريد):

CustomerCode=CUST001&CustomerName=Customer+One&ContactName=Fuebo+Gacia&Country=France&PostalCode=8234994&ClassTemplate=Class+Template&BusinessType=Wholesale&IsProspect=True

--- في الأساس قلقي الآن هو كيفية استرداد هذه القيم بشكل صحيح ، لقد حاولت تمرير سلسلة XML ولكن كان لها أيضًا قيم ذات تنسيقات أحرف مختلفة ، ربما يحتاج هذا إلى تحليله أو شيء من هذا القبيل. نأمل أن يساعدنا هذا في حل المشكلة.

شكرًا

نصائح أخرى

أنت تمرن النوع المعقد باعتباره xElement - وهذا سيجعل الأمور أكثر تعقيدًا. فقط تمرير الكائن القوي. دع المسلسل يقوم بالعمل من أجلك. بالإضافة إلى ذلك ، ستحصل على صفحة المساعدة التلقائية التي ستظهر لك بالضبط كيف يجب عليك تسلسل XML لنوعك. إليك مورد آخر لإعداد ملف خدمة الراحة WCF.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top