17

Philips Hue Lights用のC#ライブラリを作成しています。.NETポータブルセットでベースAPIラッパーを作成しようとしています。これにより、このライブラリをWindows 8 / RT/WPなどのさまざまなプラットフォームで再利用できます。API自体はRESTを使用するHTTP全体であるためHttpWebRequest、私のニーズのほとんどに対応します。

ライト自体を制御するネットワークブリッジは、SDSPoverUDPを使用して検出できます。ただし、ポータブルクラスライブラリ(PCL)でUDPソケットを使用する方法を見つけることができません。

利用できるものはありませSystem.Net.Socketsん。System.Net名前空間には、それを可能にするものは何もありません。DatagramSocketにリストされているのを見ましWindows.Networking.Socketsたが、Intellisenseでその名前空間を見ることができません。

.NET PCLでSSDPのUDP機能を取得する方法を知っている人はいますか?

検出機能をコアライブラリから分離する必要は本当にありません。

今、私はターゲットにして.NET 4.5 + SL 5 + WP 8 + .NET for Windows Storeいます。ソケットはまだ利用可能だという印象を受けました。

4

2 に答える 2

5

WinRTアプリとWPFアプリの間にソケットサポートの共通の交差点がないため、それらを対象とするPCLプロジェクトでは使用できません。

UDP検出ネットワークと対話するWPFおよびWinRTを対象とするPCLライブラリがあり、データの送受信およびマルチキャストグループへの接続用のメンバーを定義するIUDPSocketインターフェイスをPCLライブラリに作成することで思いついた最もクリーンな実装があります。WPFアプリはSystem.Net.Sockets.Socketを使用してIUDPSocketを実装し、RTアプリはWindows.Networking.Sockets.DatagramSocketを使用してこれを実装します。

ディスカバリーネットワーククライアントクラス(PCLプロジェクトで定義)のコンストラクターは、IUDPSocketのインスタンスを作成するために使用されるデリゲートを取ります。初期化されたIUDPSocketインスタンスを渡す代わりにこれを行うので、呼び出し元のコードはどのポートまたはアドレスが関係しているかを知る必要がありません。

于 2013-01-14T14:40:13.780 に答える
0

このMSDNの記事で説明されているように、PCLはターゲットプラットフォームの一般的なアセンブリに限定されています。

Portable Class Libraryプロジェクトでは、ターゲットにするプラットフォームを指定し、それらのプラットフォームでサポートされているアセンブリのみがプロジェクトで参照されます。対象のプラットフォームでサポートされていないアセンブリを参照しようとすると、VisualStudioは非互換性について警告します。コアアセンブリ(mscorlib.dll、System.dll、System.Core.dll、およびSystem.Xml.dll)は、すべてのプラットフォームでサポートされています。

同じ記事の要約表に記載されているように、ネットワーククラスライブラリ(NCL)は、XBox 360を除くすべてのプラットフォームでサポートされています。さらに読むと、次の情報が得られます。

Portable Class Libraryプロジェクトでターゲットにするプラットフォームを指定すると、それらのプラットフォームでサポートされているアセンブリがプロジェクトで自動的に参照されます。アセンブリを追加または削除する必要はありません。ターゲットプラットフォームを変更すると、参照されるアセンブリが自動的に更新されます。

したがって、おそらく、プロジェクトの作成中にすべてのプラットフォームを選択しました。XBox 360を無効にすると、NCLとUdpClientのサポートが復活します。ただし、Xbox 360のサポートも必要な場合は、PCLではないプロジェクトタイプを選択するか、UDPサポートを手動で実装するかの2つのオプションがあります。

于 2013-01-13T02:41:36.793 に答える