# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > Silverlight > سوال: مشکل در ارسال byte[] به WCF

## mohsen.r

سلام خدمت همه دوستان
من  یک عکس رو از کاربر گرفته و اون رو تبدیل به byte[] می کنم، ولی وقتی که میخوام اون رو به صورت پارامتر به WCF   بفرستم با پیام خطای زیر مواجه میشم:
The remote server returned an error: NotFound

البته web.config رو هم تغییردادم ولی درست نشد و باز هم همون خطا رو میده.
لطفا اگه امکان داره یه برنامه که این کارو انجام میده رو اینجا بزارید. 

با عرض معذرت خیلی عجله دارم اگه امکان داره سریع این کارو انجام بدید. :خجالت:

----------


## mahdi7s

با سلام
اررور فوق یعنی سرویس شما یک مشکلی دارد و قبل از اینکه بخواهد اطلاعات را به کلاینت ارسال کند به خطا برخورد می کند و سرور به حالت Faulted می رود...
آیا خود سرویس را جداگانه امتحان کردید؟
پس اعمال تغییرات در سرور مرجع آن در کلاینت را Update کردید؟
نهایتا کد سرویس و contract ها و فایل پیکربندیتان(لزوما تگ system.serviceModel) را قرار دهید تا زودتر به جواب برسید.

موفق باشید

----------


## mohsen.r

با سلام
به نظر نمیاد از سرویس باشه چون وقتی یه پارامتر از نوع String می فرستم مشکلی نداره
تو این برنامه فقط زمانی این Error رو میده که بخوام پارامتری از نوع Byte[] به وب سرویس ارسال کنم.
البته چندجا خوندم که باید تنظیمات web.config رو تغییر بدم. من هم اون مراحلی رو که لازم بود انجام دادم ولی باز هم به همین خطا برخورد می کنم.
اگر شما قبلا این کارو انجام دادید لطفا یه Source Code برام بزارید.

با تشکر

----------


## mahdi7s

شما پارامتر String را با یک آرایه ی byte مقایسه می کنید؟! و اگر کمی حجم اطلاعات بالا رود بهتر است از روش Streaming استفاده کنید!
متاسفانه چندان وقت ندارم سمپلی بگذارم.

موفق باشید

----------


## taghvajou

سلام به همه
محسن یه نمونه کد ساده واستون نوشتم و گذاشتم. همین رو اجرا کن و اگه باز هم به مشکل برخوردی، یه تصویر از خطای بذار تا ببینینم مشکل از کجاست!

----------


## mohsen.r

با سلام خدمت همه دوستان
از کمکتون خیلی ممنونم
ولی متاسفانه نمونه برنامه شما هم همون مشکل رو داره و Error میده.
البته من خودم تونستم این مشکل رو حل کنم. و نمونه کد رو هم گذاشتم.

با تشکر

----------


## taghvajou

سلام به همه
1- میشه لطف کنی اصل خطا رو هم بذارین
2- کد رو یه بار هم با عکسی با حجم پایین تر امتحان کنین و نتیجه اش رو هم بفرمایین
3- مشکلی که پیدا کردین چی بود؟ و چه جوری حلش کردین؟
4- نمونه کد رو کجا گذاشتین؟
5- با تشکرت

----------


## mohsen.r

سلام
آقای تقوی جو کدی که قبلا نوشته بودم و با خطا مواجه شده بود شبیه نمونه کد شما بود و با هر عکسی حتی عکس با حجم 10کیلو بایت هم Error میداد. این فایل ضمیمه هم نتیجه اجرای برنامه شما هست، که در هنگام آپلود عکس با حجم  20 کیلوبایت رخ داد.

----------


## taghvajou

سلام به همه
محسن جان! قضیه پیچیده شد؟!؟!؟ 
مشتاق شدم که این مسئله رو حتما و دقیقا بشناسیم.
من کد خودم رو از یه کامپیوتر دیگه دانلود کردم و اونجا هم امتحان کردم.(تصاویر ضمیمه)
شما مشکل رو تو کجا پیدا کردی؟ چی بود؟ چی شد؟ چی کار کردی که رفع شد؟ یه کم توضیح بده! (اشاره به سوال سوم پست شما 7 همین تاپیک)

----------


## mohsen.r

سلام خدمت همه دوستان
آقای تقوی جوی عزیز لینک سایتی رو که نمونه پروژه رو داره براتون گذاشتم.
http://www.silverlightchina.net/html/developer/silverlight/2010/1017/2702.html

----------


## sia_2007

بابا اینجا چه خبره
اونی که شما نشون میدی Exception اصلی نیست
اول IncludeFaultExpection رو برابر True قرار بدین
بعد اگه سرور رو IIS هاست شده؛ Debug رو Enable کنین
بعد اون Exception اصلی رو نشون بدین !

----------


## sia_2007

<compilation debug="*true*" targetFramework="4.0" />
    </system.web>

    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="*true*" />

----------


## sia_2007

در ضمن Start Mode خود Solution رو بذارین رو Multiple ؛ و بعدش بگین اول Service رو اجرا کنه و بعد کلاینت رو
هر دو رو هم تو مد Debug
البته من خطایی نگرفتم؛ که به شما نشون بدم

----------


## akoroorian

ممکنه خیلی دیر شده باشه، ولی برای اونای دیگه ای که دنبال جوابشون میان اینجا میزارم.
من هم مشکل مشابه ای داشتم که بخاطر اندازه زیاد آرایه بایتی که میخواستم ارسال کنم همین پیغام رو میداد.
اینجا جوابشو پیدا کردم.
http://forums.silverlight.net/forums/t/189294.aspx
امیدوارم بدرد خورده باشه.

----------


## taghvajou

سلام به همه
ممنون از اینکه حتی دیدین که یه تاپیک کهنه شده ولی باز هم تجربه تون رو انتقال میدین. با اجازه تون من یه کمی کاملتر کنم.

مطلبی که شما بهش اشاره کردین خیلی مفید بود. ممنون 

میخوام تکمیل تر کنم.
شروع از اضافه کردن زمان تایم آوت ارسال، دریافت، باز کردن و بستن سرویسه. یعنی:
    <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

نکته موجود تو اون تاپیک که دوستمون اشاره کردن تو آرای ها جواب میده و برای اشیا صادق نیست که در اون صورت در کار با یه لیست ( همون یه شی از کلاس آبزروال کالکشن تو سیلورلایت) باز هم مشکل به قوت خود باقی می مونه

امیدوارم که توضیحات تکمیلی مفید بوده باشه. التماس دعا

----------


## Sahar.Sari

با اینکه قدیمی بود استفاده کردم ممنون

----------

