Dalam situasi di mana Anda memiliki antarmuka UI yang dibangun menggunakan gaya aplikasi Metro baru untuk windows 8, dan ingin berkomunikasi dengan aplikasi .NET yang berjalan di desktop pada mesin lokal yang sama (mis. Aplikasi layanan Windows).
Bentuk komunikasi antarproses apa yang tersedia antara aplikasi metro dan aplikasi desktop?
Terima kasih kepada Pavel Minaev dari tim Visual Studio, yang telah memberikan beberapa info awal di sini dalam sebuah komentar, dikutip:
Menurut Martyn Lovell, tidak ada mekanisme yang disengaja untuk itu, dan beberapa yang dapat digunakan untuk itu sengaja dibatasi. Pipa bernama tidak ada, misalnya, juga tidak ada file yang dipetakan memori. Ada soket (termasuk soket server), tetapi saat terhubung ke localhost, Anda hanya dapat terhubung ke aplikasi yang sama. Anda dapat menggunakan file normal di salah satu "folder yang dikenal" bersama (Dokumen, Gambar, dll), tetapi itu adalah peretasan yang cukup kasar yang memerlukan polling dan dapat dilihat oleh pengguna. - Pavel Minaev mengomentari masalah ini
Jadi karena kegagalan pendekatan normal saya berpikir untuk menggunakan layanan web atau membaca / menulis ke database untuk mendapatkan beberapa bentuk komunikasi yang terjadi, keduanya tampak seperti berlebihan ketika proses berjalan pada mesin yang sama.
Apakah yang saya coba di sini masuk akal? Saya melihat perlunya aplikasi metro menjadi antarmuka antarmuka untuk layanan yang sudah ada yang berjalan di desktop. Atau lebih baik menggunakan WPF untuk antarmuka antarmuka yang berjalan di desktop (yaitu aplikasi non-metro).
Jawaban:
Saya sedang mem-porting proyek saya yang ada ke Win8 sekarang. Ini terdiri dari layanan windows dan aplikasi baki yang berbicara satu sama lain melalui NamedPipes WCF. Seperti yang Anda ketahui, Metro tidak mendukung pipa bernama. Saya akhirnya menggunakan TcpBinding untuk koneksi dupleks penuh.
Posting ini menjelaskan fungsionalitas apa yang didukung.
Contoh server WCF saya yang dapat digunakan klien Metro ada di sini .
Juga perlu diingat bahwa Anda tidak dapat menggunakan WCF sinkron di Metro. Anda harus menggunakan Task berbasis wrapper yang hanya asynchronous.
Dan terima kasih atas pertanyaan Anda. Saya adalah titik awal yang baik untuk saya :)
sumber
Ada sejumlah pertanyaan seperti ini di akhir // build / sesi yang saya hadiri. Aleš Holeček, eksekutif yang melakukan salah satu sesi gambar besar, keluar dari penonton untuk menanganinya. Meskipun Anda bukan pengembang C ++, unduh sesi itu dan tonton Tanya Jawab http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-789C
Aplikasi Metro tidak dapat mengandalkan aplikasi atau layanan desktop yang diinstal di mesin. Dan aplikasi desktop tidak dapat mengandalkan aplikasi Metro yang berjalan karena dapat ditangguhkan kapan saja. Anda perlu mulai berpikir secara berbeda. Dengarkan Aleš yang satu ini.
sumber
localhost
secara langsung melalui soket TCP, mengapa Anda dapat melakukan hal yang sama melalui WCF?Perhatikan bahwa dengan Pembaruan Windows 8.1, komunikasi antara aplikasi Windows Store dan komponen desktop yang ditulis dalam C # untuk .NET 4.5+ sekarang secara resmi didukung untuk aplikasi yang dimuat samping dalam skenario Perusahaan:
Komponen Runtime Windows yang Dirusak untuk aplikasi Windows Store yang dimuat samping
Kutipan:
Meskipun menerapkan pendekatan ini pada awalnya agak rumit, ini memungkinkan integrasi yang mendalam di seluruh komponen Windows Store dan desktop. Ingatlah bahwa untuk saat ini, itu tidak akan lulus sertifikasi Windows Store publik.
sumber
Ada artikel di InfoQ tentang cara membuat aplikasi Metro yang digabungkan secara longgar dengan penangan protokol. Ini adalah sesuatu yang telah didukung oleh Windows sejak lama dan aplikasi desktop dapat meramalkan dirinya sendiri sebagai penangan protokol dan mungkin aplikasi metro dapat berkomunikasi melalui mekanisme ini.
Saya tidak tahu apakah ini mungkin, tetapi mungkin menarik untuk dilihat.
sumber
Christophe Nasarre telah membuat blog tentang cara yang agak hack untuk melakukannya menggunakan file lokal. Hasilnya adalah komunikasi antara aplikasi desktop / aplikasi windows store (disebut sebagai DA / WSA di blog), tanpa harus beralih antar UI dari kedua aplikasi tersebut. Dia juga membuat blog tentang teknik lain yang tidak terlalu hacky yang melibatkan penangan protokol.
Perhatikan bahwa memiliki WSA yang berkomunikasi dengan DA secara eksplisit dilarang oleh persyaratan sertifikasi Aplikasi toko
... tetapi hanya membatasi "mekanisme lokal". Jadi saya kira seseorang dapat membangun layanan web untuk merutekan komunikasi.
sumber
Jika Anda merasa dapat membuat operasi cmd manual tambahan, Anda dapat mencoba:
CheckNetIsolation.exe disertakan dalam pemasangan winRT, jadi tidak ada tambahan yang harus dipasang.
Saya mencobanya: berhasil, bahkan setelah pembaruan paket.
Seperti yang ditunjukkan di: http://msdn.microsoft.com/en-us/library/windows/apps/Hh780593.aspx
Di sini dijelaskan cara mengetahui packageID untuk aplikasi Anda: http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/82bad7d4-d52b-4731-a396-13ab9004c1cc/how-to-get- the-appid-of-a-metro-style-app-
sumber
Dimungkinkan untuk berkomunikasi pada mesin yang sama dari aplikasi Metro ke aplikasi desktop menggunakan layanan lokal. Saya telah menerapkan beberapa waktu yang lalu "bukti konsep" sederhana, bagaimana melewati kotak pasir WinRT menggunakan layanan lokal. Ini masih membutuhkan semacam "manipulasi psikologis" atau panduan langsung untuk menginstal layanan, tapi bagaimanapun, itu mungkin.
Saya tidak yakin tentang aturan sertifikasi tentang komunikasi "layanan lokal" ketika menambahkan aplikasi semacam itu ke Windows Store.
Cicipi di sini
sumber
Mungkin saya melewatkan intinya tetapi ketika mengaktifkan kemampuan jaringan Pribadi saya dapat terhubung ke server lokal (http) yang menggunakan alamat IP lokal (bukan localhost). Ini memungkinkan skenario saya di mana aplikasi winrt berkomunikasi dengan aplikasi desktop wpf
sumber