2012-06-26 42 views
3

有人可以發佈使用InstanceInput端點的示例代碼嗎? 我用下面的配置輔助角色,其中在端口8080Azure InstanceInput端點使用

<Endpoints> 
    <InstanceInputEndpoint name="InstanceAccess" protocol="tcp" localPort="8080"> 
    <AllocatePublicPortFrom> 
     <FixedPortRange max="10105" min="10101" /> 
    </AllocatePublicPortFrom> 
    </InstanceInputEndpoint> 
</Endpoints> 

樣本WCF服務偵聽但我無法使用任何端口10101至10105外部消費者訪問該WCF服務。我們是否應該使用Azure服務的公有DNS名稱以及給定範圍內的公共端口?

另外,我無法從worker角色OnStart()方法中訪問此端點詳細信息。我使用了RoleEnvironment.CurrentRoleInstance.InstanceEndpoints [「InstanceAccess」]。但它不返回RoleInstanceEndpoint。我在這裏錯過了什麼嗎?

+0

我認爲Azure Cmopute模擬器目前不支持InstanceInputEndpoint,所以你不能真正在本地測試它。如果我在Azure上部署應用程序,似乎一切正常。 – Robar

回答

0

Here是一個示例Visual Studio解決方案,它使用Azure InstanceInput端點並承載工作者角色上的WCF服務。可以使用Azure DNS名稱和映射到該實例的公用端口來訪問在每個單獨實例上運行的WCF服務。我使用了以下端點配置。

<Endpoints> 
     <InstanceInputEndpoint name="Endpoint1" protocol="tcp" localPort="10100"> 
     <AllocatePublicPortFrom> 
      <FixedPortRange max="10110" min="10106" /> 
     </AllocatePublicPortFrom> 
     </InstanceInputEndpoint> 
    </Endpoints> 

該端點在某種程度上不能從WorkerRole(OnStart()和Run()方法中訪問)。所以我使用了'localhost'。

string endpointIP = "localhost:10100"; 

    if (RoleEnvironment.CurrentRoleInstance.InstanceEndpoints.Keys.Contains("Endpoint1")) 
    { 
     IPEndPoint externalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint; 
     endpointIP = externalEndPoint.ToString(); 
    } 

該解決方案還包含一個控制檯客戶端,它使用託管的DNS名稱來調用這些單獨的WCF服務。

+0

嘗試在計算模擬器中測試鏈接的解決方案時,第一次命中AddressAlreadyInUseException後,輔助角色的實例。我想這是預料如果模擬器只是綁定到主機的可用端口... – icelava