Azure で単純なクライアント サーバーを作成しようとしています。クライアントを 1 つの webrole に、サーバーを別の webrole に持っており、両方が同じテナントに属しています。2 つの間の単純なソケット通信を使用して、ダミー ファイルをクライアントからサーバーに送信したいと考えています。
これが私のアプリの書き方です(わかりやすくするために一部のコードを削除しました):
1- 各役割の「内部」TCP エンドポイントを定義します。サーバーのポートが 9000 であると仮定します。クライアントのポートは 9010 です。
2- クライアントは、次のようにダミー ファイルをサーバーに送信します。
byte[] buffer = File.ReadAllBytes(filePath);
mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
mSocket.Connect(IPAddress.Parse(serverIPString), 9000);
mSocket.Send(buffer);
3-サーバーで、次のことを行います。
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 9000);
mSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
mSocket.Bind(ipEnd);
mSocket.Listen(BACKLOG);
Socket socket = mSocket.Accept();
byte[] buffer = new byte[BUFFER_SIZE];
int byteCount = socket.Receive(buffer);
Azureエミュレーターではすべてがローカルで正常に機能しますが、クラウドに移動するとサーバーに接続できません:(
助けてください!
補遺:
エンドポイントを見つける方法を誰かに尋ねられました。次のようにサーバーのメイン ページにエンドポイントを表示し、送信者/クライアントにファイルの送信先の IP をテキスト ボックスで指定させます。
foreach (var instance in RoleEnvironment.CurrentRoleInstance.Role.Instances)
foreach (KeyValuePair<string, RoleInstanceEndpoint> pair in instance.InstanceEndpoints)
addresses += "[" + pair.Key + "] " + pair.Value.IPEndpoint.Address + ":" + pair.Value.IPEndpoint.Port + ", ";