Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir web sayfasını barındırmak ve tanılama bilgileri sağlamak için Windows Cihaz Portalı'nı kullanan paketlenmiş bir uygulama (UWP veya Windows Uygulama SDK'sı kullanarak paketlenmiş Win32) yazabilirsiniz. Cihaz Portalı eklentisi işlevi, kullanıcı arabirimi çerçevesinden windows.devicePortalProvider bağımsız olarak tüm paketlenmiş uygulamalar tarafından kullanılabilen uzantı kullanılarak uygulanır.
Note
Bu makale IoT Enterprise cihazları, bilgi noktası dağıtımları veya Cihaz Portalı'nın uzaktan izleme için kullanıldığı diğer yönetilen Windows ortamları için tanılama veya yönetim araçları oluşturan geliştiricileri hedeflemektedir. Standart bir Windows 11 masaüstü uygulaması oluşturuyorsanız Cihaz Portalı eklentisine ihtiyacınız olma olasılığı düşüktür; bunun yerine Uygulama tanılama veya Windows Performans Analizi kullanmayı göz önünde bulundurun.
Cihaz Portalı eklentisi desteği Windows 10 ve sonraki sürümlerde kullanılabilir.
Projeyi oluşturma
Microsoft Visual Studio'da yeni bir uygulama projesi oluşturun. Dosya > Yeni > Project'ne gidin ve aşağıdaki project şablonlarından birini seçin:
- UWP uygulaması için: C# için Boş Uygulama (Windows Evrensel)
- WinUI 3 masaüstü uygulaması için: Boş Uygulama, Paketlenmiş (Masaüstünde WinUI 3)
Yeni projenizi yapılandırın iletişim kutusunda projeyi DevicePortalProvider olarak adlandırın ve oluştur'a tıklayın. Bu, uygulama hizmetini içeren uygulama olacaktır.
devicePortalProvider özelliğini ekleme
rescap:devicePortalProvider Bu özelliği uygulamanızın Package.appxmanifest dosyasına ekleyin.
Note
rescap (Kısıtlı Yetenek) ad alanının kullanılabilmesi için önce bildirilmesi gerekir. Ayrıntılar için bkz. Uygulama özelliği bildirimleri .
Çözüm Gezgini içinde, bildirim tasarımcısını açmak için Package.appxmanifest öğesine çift tıklayın, ardından Yetenekler sekmesine geçin ve listeleniyorsa Device Portal Provider seçeneğini işaretleyin veya XML’yi düzenleyerek bunu el ile ekleyin.
<Capabilities>
<rescap:Capability Name="devicePortalProvider" />
</Capabilities>
App Service'i ayarlama
Cihaz Portalı eklentileri, eklenti ana bilgisayar işlemi ile Cihaz Portalı arasında iletişim kurmak için uygulama hizmetlerini kullanır.
Package.appxmanifest öğesini açın, Beyanlar sekmesine geçin, bir Windows Cihaz Portalı Sağlayıcısı beyanı ekleyin ve bunu hizmet adıyla yapılandırın.
Alternatif olarak, XML'yi doğrudan düzenleyin:
<Applications>
<Application Id="App" ...>
...
<Extensions>
<uap3:Extension Category="windows.appService" EntryPoint="DevicePortalProvider.DevicePortalPluginService">
<uap3:AppService Name="com.microsoft.myapp.devicePortalService" SupportsRemoteSystems="true"/>
</uap3:Extension>
<uap4:Extension Category="windows.devicePortalProvider">
<uap4:DevicePortalProvider DisplayName="My App Plugin" AppServiceName="com.microsoft.myapp.devicePortalService" HandlerRoute="/MyCustomApp/"/>
</uap4:Extension>
</Extensions>
</Application>
</Applications>
Important
uap3 ve uap4 XML ad alanı ön ekleri bildiriminizin kök <Package> öğesinde bildirilmeli ve özniteliğine IgnorableNamespaces eklenmelidir:
<Package
...
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
IgnorableNamespaces="... uap3 uap4">
Aşağıdaki öznitelikler, uygulamanıza özgü yapılandırma gerektirir:
| Özellik | Description |
|---|---|
EntryPoint |
App Service'i uygulayan sınıfı belirtir. |
Name (AppService) |
App Service'in benzersiz adı. Bu ad, DevicePortalProvider öğesinde AppServiceName özniteliği olarak kullanılır. |
DisplayName |
Cihaz Portalı kullanıcı arabiriminde görünecek ad. |
HandlerRoute |
Cihaz Portalı'nın istekleri eklentinize yönlendirmek için kullandığı URL yolu ön eki. Yolu bu değerle başlayan tüm istekler app service'inize iletilir. Yolun eğik çizgilerle başlaması ve bitmesi gerekir. |
App Service kodunu ekleme
Arka plan uygulama hizmetini barındırmak için çözümünüze bir Windows Çalışma Zamanı Bileşeni projesi ekleyin:
- Çözüm Gezgini'da çözüme sağ tıklayın ve Yeni Project Ekle'yi >seçin.
- Windows Çalışma Zamanı Bileşeni (Evrensel Windows) seçip DevicePortalProvider olarak adlandırabilirsiniz.
- Yeni projeye sağ tıklayın ve Yeni Öğe > App Service Ekle'yi >seçin.
App service kodu uygulama ayrıntıları, App Service oluşturma ve kullanma makalesinde yer alır.
Cihaz Portalı işleyicinizi uygulama
Cihaz Portalı eklentisi uygulama hizmetinin örnek bir uygulaması aşağıda verilmişti:
using Windows.ApplicationModel.AppService;
using Windows.ApplicationModel.Background;
using Windows.Storage;
using Windows.System.Diagnostics.DevicePortal;
using Windows.Web.Http;
namespace DevicePortalProvider
{
public sealed class DevicePortalPluginService : IBackgroundTask
{
private BackgroundTaskDeferral _taskDeferral;
private DevicePortalConnection _connection;
public void Run(IBackgroundTaskInstance taskInstance)
{
_taskDeferral = taskInstance.GetDeferral();
taskInstance.Canceled += OnTaskCanceled;
var triggerDetails = taskInstance.TriggerDetails as AppServiceTriggerDetails;
_connection = DevicePortalConnection.GetForAppServiceConnection(triggerDetails.AppServiceConnection);
_connection.RequestReceived += _connection_RequestReceived;
}
private void OnTaskCanceled(IBackgroundTaskInstance taskInstance, BackgroundTaskCancellationReason reason)
{
_taskDeferral.Complete();
}
private async void _connection_RequestReceived(DevicePortalConnection sender, DevicePortalConnectionRequestReceivedEventArgs args)
{
// Handle the incoming request and send a response
}
}
}
Gelen istekleri işleme
Eklenti işleyiciniz, Cihaz Portalı'nın sizin HandlerRouteiçin yönlendireceği tüm GET, POST, DELETE ve PUT isteklerini alır. Tipik bir uygulama:
private async void _connection_RequestReceived(
DevicePortalConnection sender,
DevicePortalConnectionRequestReceivedEventArgs args)
{
var request = args.RequestMessage;
var response = args.ResponseMessage;
// Use the request's path to determine what data to return
// The path must begin with the HandlerRoute declared in the manifest (e.g. "/MyCustomApp/")
if (request.RequestUri.LocalPath.Equals("/MyCustomApp/info", StringComparison.OrdinalIgnoreCase))
{
response.Content = new HttpStringContent(
"{ \"appVersion\": \"1.0\" }",
Windows.Storage.Streams.UnicodeEncoding.Utf8,
"application/json");
response.StatusCode = HttpStatusCode.Ok;
}
}
Statik içerik sunma
Uygulamanızın paketinden web içeriği (HTML, CSS, JavaScript) sunmak istiyorsanız, bu dosyaları bir klasöre yerleştirebilir ve isteklere dosya içeriğiyle yanıt vekleyebilirsiniz.
private async void _connection_RequestReceived(
DevicePortalConnection sender,
DevicePortalConnectionRequestReceivedEventArgs args)
{
var storageFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(@"data\content.html");
string htmlContent = await FileIO.ReadTextAsync(storageFile);
args.ResponseMessage.Content = new HttpStringContent(
htmlContent,
Windows.Storage.Streams.UnicodeEncoding.Utf8,
"text/html");
args.ResponseMessage.StatusCode = HttpStatusCode.Ok;
}
Uygulama hizmetini Sistem olarak çalıştırma
Bazı durumlarda, Cihaz Portalı eklentisinin tam testi için eklentiyi Sistem hesabı olarak çalıştırmanız gerekebilir. Ayrıntılar için MSDN Dergisi makalesine bakın.
Ayrıca bkz.
Windows developer