۱۳۹۰/۰۱/۲۸

روش از كار انداختن صفحه‌ي Add service reference در VS.NET


در جهت تكميل بحث "بررسي امنيتي، حين استفاده از jQuery Ajax"، يك مورد ديگر را هم مي‌توان اضافه كرد: چگونه صفحه‌ي معروف Add service reference را در VS.NET جهت سرويس WCF خود از كار بيندازيم؟
راه حل آن هم بسيار ساده است اما چون عموما در منابع مرتبط با جملات و كلمات بيش از حد فني بيان مي‌شود، شايد از ديد دور مانده باشد:
اگر WCF Service توليدي شما تنها قرار است توسط برنامه‌ي Silverlight يا جاوا اسكريپتي موجود در پروژه‌ي جاري مورد استفاده قرار گيرد، بايد Meta Data مرتبط با آن سرويس را جهت بالابردن امنيت سيستم، حذف نمود. توسط اين Meta Data مي‌توان ServiceContract ، OperationContract و ساير اطلاعات يك WCF Service را استخراج نمود.

الف) روش غير فعال كردن متاديتا در يك Ajax enabled WCF Service

به فايل وب كانفيگ برنامه مراجعه كرده و تغيير زير را اعمال كنيد:
...
<behavior name="">
<serviceMetadata httpGetEnabled="false" httpsGetUrl="false" />
...
</behavior>
...

ب) روش غيرفعال كردن متاديتا در يك Silverlight enabled WCF Service

ابتدا قسمت الف را اعمال نموده سپس تغيير زير را نيز لحاظ نمائيد (IMetadataExchange به صورت كامنت درآمده):
<!-- <endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" /> -->

با اين تغييرات ساده، گزينه‌ي Add service reference ديگر قابليت تشخيص خودكار اطلاعات سرويس شما را نداشته و با يك خطا متوقف خواهد شد:
The HTML document does not contain Web service discovery information.
Metadata contains a reference that cannot be resolved.

سؤال:
1- آيا با اين تغيير در عملكرد WCF سرويس ما اخلال ايجاد خواهد شد؟
پاسخ: خير. تنها Web service discovery information را از كار انداخته‌ايم.
2- در صورت تغيير كدهاي WCF Service چه بايد كرد؟
پاسخ: اگر امضاي متدها و اينترفيس‌هاي تعريف شده تغييري نداشته‌اند، لزومي به هيچ نوع تغييري نيست. در غيراينصورت، سريع موارد الف و ب فوق را به حالت اول برگردانده، كلاينت مورد استفاده را به روز كنيد، مجددا متاديتا را حذف نمائيد.