یادداشت های من

دنبال کنندگان ۱ نفر
این وبلاگ را دنبال کنید

۳ مطلب با موضوع «آموزش ها :: مطالب مرتبط با وِیژوال استودیو» ثبت شده است

برای تبدیل کامپیوتر خودتان به سرور تلگرام(با استفاده از روش WebHook)  برای دیباگ کردن کد هاتون میتونید مراحل زیر را انجام بدید تا کامپیوتر شما آماده پاسخگویی به سرور تلگرام باشد : همانطور که اطلاع دارید در روش WebHook  ابتدا باید Url  مشخصی که قرار است درخواستهای تلگرام به اون Forward بشه رو باید به تلگرام بشناسونیم .

برای این کار باید از Browser این تکه ادرس زیر را تایپ کنیم

https://api.telegram.org/bot(yourToken)/setWebhook?url=http://ادرس هاست

و در نهایت شما باید یه همچین چیزی داشته باشین : 


https://api.telegram.org/bot425345159:AAGFggsjEBukP7eB6GeENfDs3230LR-M/setWebhook?url=https://testurl.com

با باز کردن این ادرس در browser با ثب شدن آدرس شما ، تلگرامی پیامی را با متن زیر برای شما نمایش می دهد  :  

 WebHook was set 

خب بریم سر اصل مطلب .

در حالت عادی تمام این url که در webhook  ست می شود معمولا بر روی هاست خریداری شده از طرف شما هست ، اما حالا ما موردی رو بررسی میکنیم که شما میتونید کامپیوتر خودتونم تبدیل به یه هاست از نوع HTTPS کنید و به راحتی کدتون رو بزنید و دیباگ کنید .



خب مرحله به مرحله پیش میریم :


1) ابتدا باید نرم افزار ngrok  رو دانلود کنید .  حجم حدود 5 mb : دانلود ngrok 


2) بعد از این که نرم افزار را دانلود کردید باید به صورت run as administrator  بازش کنید .


3) در این مرحله ابتدا باید چک کنیم که Visual studio پروژه تحت وب که میتونه هم Webapi باشه  هم MVC بر روی کدوم پورت اجرا میشه

 (right click on project/properties/ web tab) 


خب حالا برای مثال پورت میشه 5422


4) خب در اینجا فقط اجرای نرم افزار ngrok مونده که به صورت command prompt باز شده است . دستور زیر را تایپ کنید 


ngrok http 5422


5) خب پس از وارد کردن دستور بالا ngrok  یک تونل برای شما ایجاد میکند 


ویه همچین چیزایی نشونتون میده 


Forwarding              Http://1242d2bdkf.ngrok.io -> localhost:5422
Forwarding              Https://1242d2bdkf.ngrok.io -> localhost:5422


خب در اینجا تنها کاری که باقی مانده است این است که شما به سرور تلگرام بگید که میخواهید درخواستهاتون به این ادرس بره چرا که ادرسی که ngrok  به شما داده دقیقا داره تمامی درخواست ها(request ) ها رو به سیستم لوکال شما Forward میکنه .



https://api.telegram.org/bot425345159:AAGFggsjEBukP7eB6GeENfDs3230LR-M/setWebhook?url=Https://1242d2bdkf.ngrok.io/ControllerName/Methodname
https://api.telegram.org/bot425345159:AAGFggsjEBukP7eB6GeENfDs3230LR-M/setWebhook?url=Https://1242d2bdkf.ngrok.io/home/GetMsgAsync


دقت داشته باشید از ادرس HTPPS استفاده کنید چون تلگرام فقط از این بستر برای ارسال درخواست میتونه استفاده کنه .


تمام شد ! خب اگر تا اینجای کار مشکلی نداشتید و همه چیز عالی اجرا شد  که هیچی اما اگر مثل من مشکل اساسی داشتید برای اینکه پروژه شما در IIS Express  در Visual Studio  بود و خواستید از حالت localhost  ادرس رو تغییر بدین به ادرس IP  باید این پست رو هم بخونین و کامل اجراش کنین . ##دسترسی از کامپیوترهای دیگر به IIS Express ای که از طریق ویژوال استودیو اجرا شده است##


دقت داشته باشید اگر تمامی موارد بالا به همراه پستی که لینکشو گذاشتم اجرا کردید حتما باید در ngrok  به این صورت دستورات را وارد کنید :

ngrok http 192.168.1.105:5422




  • سید یاسر نوراللهی

1) متصل کردن اپلیکیشن خود به یک Public IP Address

به صورت نرمال وقتی یک اپلیکیشن بر روی IIS Express  موجود بر روی Visual Studio اجرا می شود  فقط بر روی آدرس Http://localhost:[port] در دسترس است ، برای دسترسی به آن از دستگاه دیگری نیازمند است که یک آدرس IP عمومی به ماشین شما ملحق شود .

به صورت کلی اطلاعات مربوط به تنظیمات IIS Express  در این  فایل قرار دارد :

  

D:\Users[YourName]\Documents\IISExpress\config\applicationhost.config 


 اما بر اساس اطلاعات موجود ویژوال استودیو از ورژن 2015 به بعد تنظیمات IIS Express configuration جابجا شده . فایلها در حال حاظر در هر پروژه به صورت جداگانه ذخیره می شوند . فولدر اصلی معمولا در / project folder /.vs/config/applicationhost.config. قرار دارد . و دقت داشته باشید که فولدر"VS."به صورت مخفی قرار دارد . 

 

شما چیزی شبیه به این پیدا خواهید کرد :



<site name="Alpha.Web" id="2">
    <application path="/">
        <virtualDirectory path="/" physicalPath="C:\Users\Johan\HgReps\Alpha\Alpha.Web" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:58938:localhost" />
    </bindings>
</site>


در تگ <bindings> یک ردیف دیگر به صورت زیر  اضافه کنید :(اما با آی پی آدرس و شماره پورت خودتان)


<binding protocol="http" bindingInformation="*:58938:192.168.1.42" />


2) صدور مجوز اجازه اتصالات ورودی 

اگر شما از ویندوز 7 یا 10 استفاده می کنید تقریبا تمامی اتصالات ورودی شما بلاک شده اند . 

بنابر این شما به طور خاص نیاز دارید که اجازه ارتباطات ورودی را برای برنامه خود  ایجاد کنید . دستورات زیر را به ترتیب اجرا کنید .


الف) ابتدا Command Prompt را به صورت Run as administrator  اجرا کنید .

ب)دستور زیر را با جایگزین کردن IP Address  و Port  خود اجرا کنید :(این تکه فقط به http.sys می گوید که اتصال به این ادرس اوکی هست.)


> netsh http add urlacl url=http://192.168.1.42:58938/ user=everyone


ج) دستور زیر را با جایگزین کردن پورت مورد نظر خودتون اجرا کنید  :


> netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=58938 profile=private remoteip=localsubnet action=allow


این خط کد بالا یک Rule  به Firewall سیستم شما اضافه می کند که اتصال به پورت 58938 فراهم شده و اجازه دسترسی صادر می شود .


تمام شد! حالا بر روی ویژوال استودیو خود کلید Ctrl +F5 را بفشارید و پروژه را دوباره راه اندازی کنید و با استفاده از Browser  های کامپیوتر دیگر به سایت خود دسترسی

 پیدا کنید .



  • سید یاسر نوراللهی

نحوه نصب پکیج Access-Control-Allow-Origin در ویژوال استودیو به صورتی که دیگر نیازی به نصب  Add-ones اضافی بر روی Browser  وجود نخواهد داشت می توانید به صورت زیر عمل کنید .



1- باز کردن Package Manager Console و نصب کردن پکیج مورد نیاز از طریق وارد کردن خط زیر در کنسول :

Install-Package Microsoft.AspNet.WebApi.Cors


2- پس از نصب پکیج باید حداقل یک فاید Global.asax  در پروژه وجود داشته باشه اگر این فایل وجود نداشت می توانید با کلیک راست کردن بر روی پروژه در پنجره Solution Explorer  و انتخاب گزینه Add و سپس New Item  این فایل را به پروژه تون اضافه کنید .


3- در فایل Global.asax متد زیر را به صورت زیر تغییر دهید :

        protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}


کار تمام است دیگر نیاز به هیچ افزونه اضافی برای فراخوانی سرویس های توسط ای جکس وجود ندارد . 

  • سید یاسر نوراللهی