オンプレミス・システムの公開サービス

オンプレミス・システムの公開サービス

通常のWCFサービスと同様に、サービスを開発できます。

製品インスタンスProductsを配列で返すGetCampainAllメソッドを持つIProductContractクラスを、公開サービスとして実装します。
--------------------------------------------------------------------------------
【ProductContract.csから抜粋】

[ServiceContract(Name = "IProductContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
public interface IProductContract
{
    [OperationContract]
    Products[] GetCampaignAll();
}

public interface IProductChannel : IProductContract, IClientChannel { }
--------------------------------------------------------------------------------

製品がキャンペーン中か否かを判定するようにIProductContractを実装します。
--------------------------------------------------------------------------------
【ProductService.csから抜粋】

[ServiceBehavior(Name = "ProductService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]
class ProductService : IProductContract
{
    public Products[] GetCampaignAll()
    {
        return dataContext.Products.Where(product => product.IsCampaign).ToArray();
    }
(後略)
--------------------------------------------------------------------------------

オンプレミス・システムでサービスを公開する

オンプレミス・システム側でサービスを公開する手順について説明します。具体的には、以下の通りです。

  1. Web.Configの登録データを読み取る
  2. 接続モードをHTTPとして、サービスURIを作成し、Web.Configに登録されたサービス名を指定してChannelFactoryを作成する
  3. エンドポイント認証用のオブジェクトを生成し、ChannelFactoryに認証情報を登録する
  4. 公開サービスをオープンする
  5. 公開サービスをクローズする

1~4.はApplication_Startメソッド内、5.はApplication_Endメソッド内の処理となります。
--------------------------------------------------------------------------------
【Global.asax.csの抜粋】

protected ServiceHost host;

protected void Application_Start(object sender, EventArgs e)
{
    //サービス名前空間
    string servicePath = ConfigurationManager.AppSettings["ServicePath"];
    string serviceNamespace = ConfigurationManager.AppSettings["ServiceNamespace"];
    string issuerName = ConfigurationManager.AppSettings["IssuerName"];
    string issuerSecret = ConfigurationManager.AppSettings["IssuerSecret"];

  //接続モードはHTTPを選択
    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.Http;

  // サービス名前空間からURIを作成
    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, servicePath);

  // エンドポイント用の認証オブジェクトを作成
    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret;
    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName;
    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret;

  // サービスホストの作成
    host = new ServiceHost(typeof(ProductService), address);

  // エンドポイント用にServiceRegistrySettings を作成
    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);

  // 認証情報をすべてのエンドポイントに設定
    foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
    {
        endpoint.Behaviors.Add(serviceRegistrySettings);
        endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    }

  // 公開サービスをオープン
    host.Open();
}

protected void Application_End(object sender, EventArgs e)
{
    // 公開サービスをクローズ
    host.Close();
}
--------------------------------------------------------------------------------

次ページでは、オンプレミス側に作成した公開サービスと連携するよう、Azure platform側に設定を行います。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30