بيانات POST من ملف نصي (قراءة من قبل عميل سطح المكتب) إلى ملقم ASP .NET تستند

StackOverflow https://stackoverflow.com/questions/1204930

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا تطوير تطبيق خدمة العملاء - خادم يجري على تطبيق ويب ASP .NET

ويحتاج العميل (التطبيق سطح المكتب) لإرسال البيانات الواردة في ملف نصي إلى بلدي تطبيق ويب آسيا والمحيط الهادئ. صافي. أن تكون البيانات حوالي 100 KB، في شكل نصي متعدد الخطوط.

ما هي أفضل طريقة لنشر هذه البيانات إلى الخادم، بالنظر إلى أن يجب أن أفعل ذلك مرة واحدة كل 10 دقيقة أو نحو ذلك؟

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

المحلول

إذا كان الملف صغيرا بما فيه الكفاية التي يمكن احتواؤها بسهولة في الذاكرة (التي كنت تريد أن تكون إذا كنت إرساله عبر POST) ثم يمكنك القيام به ببساطة ما يلي:

string textFileContents = System.IO.File.ReadAllText( @"C:\MyFolder\MyFile.txt" );

HttpWebRequest request = (HttpWebRequest)WebRequest.Create( "http://www.myserver.com/myurl.aspx" );
request.Method = "POST";

ASCIIEncoding encoding = new ASCIIEncoding();

string postData = "fileContents=" + System.Web.HttpUtility.UrlEncode( textFileContents );

byte[] data = encoding.GetBytes( postData );

request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

Stream dataStream = request.GetRequestStream();

dataStream.Write( data, 0, data.Length );

dataStream.Close();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

// do something with the response if required

وبقدر ما يقرأ جانب الخادم النص يمكنك فقط استخدام Page.Request.Form [ "fileContents"]

نصائح أخرى

وأنا مرتبك. يقول لك هل تريد أنها المعلمة وظيفة، ولكن بعد ذلك قراءتها من رأس ...؟ ومن شأن ذلك أن يكون نموذج لآخر حقول نموذجية، أو مجرد نص طلب للبيانات الخام ...

لإرسال حقول النموذج:

    NameValueCollection fields = new NameValueCollection();
    fields.Add("name1","some text");
    fields.Add("name2","some more text");
    using (var client = new WebClient())
    {
        byte[] resp = client.UploadValues(address, fields);
        // use Encoding to get resp as a string if needed
    }

لإرسال ملف الخام (وليس كشكل؛ فقط النص نفسه)، واستخدام UploadFile. ولرؤوس، استخدم .Headers.Add.

إذا يستخدم webmethod بك HttpContext.Current.Request.Headers["errorLog"] ثم يحتاج تطبيق العميل لإرسال هذا العرف رأس HTTP عند تنفيذ الطلب. يرجى ملاحظة لا يعني أن عناوين http لإرسال البيانات الكبيرة.

في تطبيق العميل هل يمكن أن <م> إضافة مرجع ويب إلى الخدمة واستخدام فئة الوكيل الذي تم إنشاؤه لتجاوز في GetWebRequest وإضافة الخاصة بك رأس مخصص HTTP:

protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
    var req = (HttpWebRequest)base.GetWebRequest(uri);
    var value File.ReadAllText("path_to_your_file");
    req.Headers.Add("errorLog", value);
    return (WebRequest)req;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top