اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
چند وقت پیش در پروژهای یک سرویس WCF داشتم که اطلاعاتی را در قالب یک کلاس poco برگشت میداد. اخیرا بعد از اصلاحاتی در پروژه متوجه شدم که سرویس کار نمیکند. هیچ خطایی هم وجود نداشت. شروع به دیباگ کردم و متوجه شدم که سرویس برنامه اطلاعات را برگشت میدهد، اما برنامهی مشتری تعداد اطلاعات دریافتی را صفر اعلام میکند و هیچ خطایی هم گزارش نمیشود.
چون اطلاعات در قالب باینری در قسمتی از کلاس poco برگشت میشد، ابتدا حدسم حجم فایل بود.
اطلاعات کلاس poco:
public class OutgoingJob { public int Id; public string JobId; public string Subject; public string Reciver; public byte[][] Attachments; }
تنظیمات سایز ارسال و دریافت رو به حداکثر رسوندم. هیچ فایده ای نداشت. برنامهی مشتری به راحتی به سرویس وصل میشد و با سایر متدهایی که خروجیهای تایپهای اصلی مثل bool و string را برمی گرداند کار میکرد. فقط با متدی که لیست poco داشت، تعداد لیست اطلاعات دریافتی 0 اعلام میشد.
متد WCF برای برگشت اطلاعات و لاگ کردن وقایع:
public List<OutgoingJob> GetJobsList(int Count) { LogEvent("GetFaxsList Start..."); List<OutgoingJob> OutgoingJobs = new List<OutgoingJob>(); // business for fill list LogEvent("return job Count = " + OutgoingJobs.Count); return OutgoingJobs; }
[TestMethod] public void TestMethod1() { jobService ser = new jobService(); var listjob = ser.GetJobsList(5); Assert.AreNotEqual(0, listjob.Count); }
لاگهای متد WCF، تعداد را 1 اعلام میکند، اما تست، نتیجه را صفر برمیگرداند.
بعد از کلی کلنجار با تنظیمات binding و serviceBehaviors متوجه شدم که اشکال کار یه نکتهی کوچک خیلی خیلی ساده است.
من هیچ تغییری در کلاسها نداده بودم، اما برای مدیریت بهتر پروژه، فضای نام کلاسها را تغییر داده بودم و مسبب همهی مشکلات و وقت کشیها همین بود.
راه حل هم که ساده ست. هنگامی که فضای نام کلاسهای برگشتی را تغییر میدهید، حتما باید update service reference را در برنامهی مشتری اجرا کنید تا اطلاعات سرویس بروز شود.
مشکل و راه حل خیلی ساده بود، ولی از من که خیلی وقت گرفت. امیدوارم وقت دوستان مثل من هدر نره
موفق باشید