سلام به همه
ممنون از اینکه حتی دیدین که یه تاپیک کهنه شده ولی باز هم تجربه تون رو انتقال میدین. با اجازه تون من یه کمی کاملتر کنم.
مطلبی که شما بهش اشاره کردین خیلی مفید بود. ممنون
میخوام تکمیل تر کنم.
شروع از اضافه کردن زمان تایم آوت ارسال، دریافت، باز کردن و بستن سرویسه. یعنی:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="CustomBinding_DMSService" receiveTimeout="00:05:00" sendTimeout="00:05:00" openTimeout="00:05:00" closeTimeout="00:05:00">
<binaryMessageEncoding />
<httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/>
</binding>
</customBinding>
</bindings>
این مقادیر رو تو سند تنظیمات کلاینت ارجاعی سرویس (ServiceReferences.ClientConfig) در بخش سیلورلایت پروژه پیدا کرد. (البته بعد از اینکه سرویس به رفرنسهامون اضافه شده).
نکته اول اینکه مقدار بیش از پنج دقیقه اعمال نمیشه. شما هر چه قدر هم عدد بزرگتری بدین سرویس نهایتا همون 5 دقیقه رو در نظرمیگیره. چراش رو نمیدونم (منبع: داکیومنت مایکروسافت - تجربه و آزمون خطای شخصی)
عکس شماره یک:
1.jpg
نکته دوم:
مشکل انتقال اطلاعات حجیم رو فقط با زیاد کردن مدت زمان تایم آوت نمیشه رفع کرد چون گاهی بسته ای که فرستاده میشه خودش بزرگه! مثلا شما حالتی رو در نظر بگیرین که یه کالکشن دارین که اطلاعات 5000 تا کاربر رو تو اون میخواین انتقال بدین.
اینجا موقعی که آبجکتمون (هر چند در قالب یه سند ایکس ام ال) سریالایز میشه و با سرویس فرستاده میشه به طرف کلاینت ولی اگه این آبجکت بزرگ باشه باز هم به مشکل برمیخورین.
یه نگاهی به جزئیاتی که از سند سرویس رفرنس براتون دادم بکنید. یه مقدار 2147483647 بایتی برای حجم بیشینه پیام نوشته شده تو
maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"
لازمش اینکه تو سند تنظیمات بخش وب هم یه تغییر داده بشه، یعنی تو سند Web.config تو پروژه وب سالوشن که این مقدار به عنوان حجم قراردادی شی انتقالی تعریف بشه:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
پس کافیه که یه خط به وب کانفیگ اضافه بشه :<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
به عکس زیر توجه فرمایین:
2.jpg
نکته موجود تو اون تاپیک که دوستمون اشاره کردن تو آرای ها جواب میده و برای اشیا صادق نیست که در اون صورت در کار با یه لیست ( همون یه شی از کلاس آبزروال کالکشن تو سیلورلایت) باز هم مشکل به قوت خود باقی می مونه
امیدوارم که توضیحات تکمیلی مفید بوده باشه. التماس دعا