0

Azure クラウド サービスをデプロイした後、接続できませんでした。同様の質問への回答を見て、エンドポイントを調べてみましたが、正しく構成されているようです。TCP経由で接続しようとしています。Azure Compute Emulator を使用すると、すべてがローカルで正常に動作します。

ここに私の .csdef ファイルがあります:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Server"     xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"     schemaVersion="2013-03.2.0">
  <WorkerRole name="WorkerRole" vmsize="Small">
    <Imports>
      <Import moduleName="Diagnostics" />
    </Imports>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="tcp" port="4029"/>
    </Endpoints>
    <LocalResources>
      <LocalStorage name="DiagnosticStore" sizeInMB="20000" cleanOnRoleRecycle="false" />
    </LocalResources>
  </WorkerRole>
</ServiceDefinition>

Azure ワーカー ロールであるサーバー インスタンスには、次の TCP リスナーがあります。

const int port = 4029;
IPAddress addr = IPAddress.Loopback;
try
{
    var listener = new TcpListener(addr, port);
    listener.Start();
    ...
}

最後に、私のクライアントには次のものがあります。

var hostName = new HostName("[IP Address as shown in the Azure Management Portal]");
TcpSocket = new StreamSocket();

try
{
     await TcpSocket.ConnectAsync(hostName, "4029");
     ...
}

このコードは正常に動作し、サーバーが Azure エミュレーターでローカルに実行されている場合、クライアントをサーバーに接続できます。そのため、問題は Azure でサーバーをセットアップした方法にあると考える傾向があります。 . チェックすべき追加事項や、これをさらにデバッグする方法に関するヒントはありますか? どんな助けでも大歓迎です!

4

1 に答える 1

2

問題は、IPAddress.Loopback の使用とローカル ポートの選択にあると思われます。

エンドポイントのServiceDefinition構成でローカル ポートを指定していないため、Windows Azure がランダムなポートを割り当てる可能性があります。次に、次を使用してエンドポイントにアクセスする必要があります。

listener = new TcpListener( 
    RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint); 
listener.ExclusiveAddressUse = false; 
listener.Start(); 

このコードは、Maarten Balliauw の投稿からのものです。

オプションで、サービス定義ファイルにローカル ポートを指定できます。

于 2013-08-03T07:06:58.093 に答える