熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows系統管理 >> 正文

在WindowsAzure中托管WCF服務的方法

2013-11-11 21:43:36  來源: Windows系統管理 
本文將向大家介紹如何托管內部WCF服務和公共WCF服務為了托管內部WCF服務需要建立一個內部端點並使用內部角色通信與在輸入端點上托管一個外部服務最主要的區別是內部端點不具有負載均衡特性而輸入端點是掛鉤在負載均衡器上的具有負載均衡功能

  托管內部WCF服務

  其實要托管一個內部WCF服務很簡單唯一需要注意的是傳遞給 ServiceHost 的基地址不同因為端口號和IP地址要等到運行時才知道因此需要創建一個主機動態地傳遞這些信息給它




    public override bool OnStart()
    {
        // 設置最大並發連接數
        ServicePointManagerDefaultConnectionLimit = ;
        DiagnosticMonitorStart(DiagnosticsConnectionString);
        // For information on handling configuration changes
        // see the MSDN topic at
        RoleEnvironmentChanging += RoleEnvironmentChanging;
        StartWCFService();
        return baseOnStart();
    }
    private void StartWCFService()
    {
        var baseAddress = StringFormat(
            nettcp://{}
            RoleEnvironmentCurrentRoleInstanceInstanceEndpoints[EchoService]IPEndpoint
            );
        var host = new ServiceHost(typeof(EchoService) new Uri(baseAddress));
        hostAddServiceEndpoint(typeof(IEchoService) new NetTcpBinding(SecurityModeNone) echo);
        hostOpen();

  使用內部WCF服務

  我想從我另一個托管的服務調用這個服務下面就是調用這個服務的所有代碼




    protected void Button_Click(object sender EventArgs e)
    {
        var factory = new ChannelFactory<WorkerHostIEchoService>(new NetTcpBinding(SecurityModeNone));
        var channel = factoryCreateChannel(GetRandomEndpoint());
        LabelText = channelEcho(TextBoxText);
    }
    private EndpointAddress GetRandomEndpoint()
    {
        var endpoints = RoleEnvironmentRoles[WorkerHost]Instances
            Select(i => iInstanceEndpoints[EchoService])
            ToArray();
        var r = new Random(DateTimeNowMillisecond);
        return new EndpointAddress(
            StringFormat(
                nettcp://{}/echo
                endpoints[rNext(endpointsCount() )]IPEndpoint)
                );
    }

  這裡唯一要注意的是查詢F abric 確定 WorkerHost 角色中實現了 EchoService 端點並隨機給它們路由請求的所有端點本來不需要路由請求我這樣做是因為內部端點沒有負載均衡功能我希望在每個 WorkerHost 實例上均勻地分配負載

  我發現一個技巧就是不需要緩存你找到的 IPEndpoint 因為它已經緩存在API調用中但根據最佳實踐你應該緩存你的 ChannelFactory

  托管公共WCF服務

  托管公共WCF服務也很簡單唯一需要注意的是要使用一個新的行為為MEX端點處理負載均衡此外在你的服務上需要包括一個類屬性處理地址過濾不匹配問題


From:http://tw.wingwit.com/Article/os/xtgl/201311/9094.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.