簡體   English   中英

如何在azure上以編程方式托管wcf服務

[英]How to host wcf service programmatically on azure

我想在Azure上托管一個wcf服務,但是這個實例化必須是動態的,所以我想根據需要實例化新服務但是......

new ServiceHost(new Service(),<<What the heck is the base URI!?>>)

什么應該是基礎Uri(方案,服務器名稱和端口):

  1. 工人角色
  2. 一個網絡角色
    • 外部端點
    • 內部終點。 (出於性能原因,有些服務需要在負載均衡器后面互相交談,但是如何?)

這些也是可能的:

  1. 每個Web角色有多個服務主機。
  2. 不同的端點綁定即。 我想在Http上使用一個servicehost,另一個Net.tcp如果需要,我需要在部署時在csdef文件中聲明這兩個協議,還是可以按需編程添加它們(又名。后期綁定)?

我正在尋找一個解決方案,因為$$$原因不涉及ServiceBus。

無論是在Web角色實例還是工作者角色實例上,這種方法都是相同的,因為它們本質上都是Windows 2008 Server(只是Web角色有IIS運行,它也消耗了幾個端口)。 無論您想要掛起wcf服務的端口,只需將它們定義為輸入端點(每個端口一個端點),並確定哪個角色處理該端點。

只要您有可用的端口,就可以擁有多個ServiceHost。 您目前限制為每個部署總共25個輸入端點和25個內部端點,因此這是您的絕對限制。 當然,如果啟用RDP,則可用端口數會下降。 哦:關於協議:如果你想要http和tcp,你需要定義兩個端點,因為協議是用端點定義定義的。

內部端點WCF服務幾乎完全相同,但您可以取消安全性並使用net.tcp進行快速傳輸。 負載平衡的一個區別是:

  • 掛在輸入端點上的WCF服務將在角色的所有實例之間進行負載平衡
  • 掛在內部端點上的WCF服務將不會進行負載平衡。

對於后一種情況:假設您的Web角色需要與內部端點上的Worker Role的WCF服務進行通信。 您需要枚舉所有實例,獲取每個實例的IP +端口,然后隨機選擇一個(或循環,或您選擇的任何方法)。 這是一個示例方法,它返回給定角色的隨機端點實例和給定的端點名稱(從Michael Washam的博客借來的代碼):

private String GetRandomServiceIP(String roleName, String endPointName)
{
    var endpoints = RoleEnvironment.Roles[roleName].Instances.Select(i => i.InstanceEndpoints[endPointName]).ToArray();
    var r = new Random(DateTime.Now.Millisecond);
    int ipIndex = r.Next(endpoints.Count());
    return endpoints[ipIndex].IPEndpoint.Address.ToString();
}

至於設置WCF服務和相關的URI,我強烈建議抓住最新的Windows Azure培訓套件並走過工作者角色通信動手實驗室,該實驗室詳細介紹了如何設置ServiceHost,輸入端點和內部端點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM