web-dev-qa-db-ja.com

.netコアプロジェクトに環境ごとにWCFサービスを読み込む

.NETコアプロジェクトにWCFを追加するときに問題が発生しました。過去に.netを使用した場合、実行時に正しいWebサービス(Dev、Rec、Prod)をロードできるように、web.configに複数の環境を追加できます。

WCFサービスの参照をConnected Serviceとして追加したときの.netコアプロジェクトの問題により、WCFサービスのURLを含む1つのファイルConnectedService.jsonが作成されました。

{
  "ProviderId": "Microsoft.VisualStudio.ConnectedService.Wcf",
  "Version": "15.0.20406.879",
  "GettingStartedDocument": {
    "Uri": "https://go.Microsoft.com/fwlink/?linkid=858517"
  },
  "ExtendedData": {
    "Uri": "*****?singleWsdl",
    "Namespace": "Transverse.TokenService",
    "SelectedAccessLevelForGeneratedClass": "Public",
    "GenerateMessageContract": false,
    "ReuseTypesinReferencedAssemblies": true,
    "ReuseTypesinAllReferencedAssemblies": true,
    "CollectionTypeReference": {
      "Item1": "System.Collections.Generic.List`1",
      "Item2": "System.Collections.dll"
    },
    "DictionaryCollectionTypeReference": {
      "Item1": "System.Collections.Generic.Dictionary`2",
      "Item2": "System.Collections.dll"
    },
    "CheckedReferencedAssemblies": [],
    "InstanceId": null,
    "Name": "Transverse.TokenService",
    "Metadata": {}
  }
}

使用している環境に基づいて正しいサービスをロードするにはどうすればよいですか?.

私のプロジェクトでは、appsettingsもweb configもありませんでした。これは.netコアクラスライブラリであり、ASP.NETコアアプリケーションではミドルウェアとして呼び出されます。

11
Adouani Riadh

ソリューションに関心がある人のために、各appeetings。{environment} .jsonとServiceクラスにサービスのエンドポイントを追加し、環境変数ASPNETCORE_ENVIRONMENTに基づいてサービスの新しいインスタンスを注入しました

   services.AddTransient<Transverse.TokenService.ITokenService>(provider =>
        {
            var client = new Transverse.TokenService.TokenServiceClient();
            client.Endpoint.Address = new System.ServiceModel.EndpointAddress(Configuration["Services:TokenService"]);
            return client;
        });

多分最高ではないかもしれませんが、それは正常に動作します。

3
Adouani Riadh

私は.Net Core 3.1を使用していますが、これはWCFサービスを呼び出すときの私の方法です。

var sUserClientRemoteAddress = _configuration.GetValue<string>("WCFRemoteAddress:UserClient");
UserClient userService = new UserClient(UserClient.EndpointConfiguration.CustomBinding_IUser, sUserClientRemoteAddress);

まず、appsettings.jsonからエンドポイントのリモートアドレスを取得します

次に、CTOR WCFクライアントクラスパラメータでそのアドレスを使用してWebサービスクライアントを呼び出します

前もって感謝します。

0

この記事 から理解できるように、これはマイクロソフトの推奨事項です。

  1. 新しいクラスファイルを追加
  2. サービスreference.csの同じ名前空間を追加します
  3. 部分クラスを追加して、参照サービスクラスを拡張します(Reference.csで宣言)
  4. また、ConfigureEndpoint()を実装する部分的なメソッド(Reference.csで宣言)
  5. エンドポイントの新しい値を設定してConfigureEndpoint()メソッドを実装する

例:

namespace Your_Reference_Service_Namespace
{
    public partial class Your_Reference_Service_Client
    {
        static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials)
        {
            serviceEndpoint.Address = 
                new System.ServiceModel.EndpointAddress(new System.Uri("http://your_web_service_address"), 
                new System.ServiceModel.DnsEndpointIdentity(""));
        }
    }
}
  1. ここでは、appsettings.jsonファイル

    新しいSystem.Uri(con​​figuration.GetValue( "yourServiceAddress")

0
Refael

ChannelFactoryを使用してサービスを利用します。 WCF ChannelFactoryと生成プロキシ

ChannelFactoryを使用すると、EndpointAddressを設定できます。 方法:ChannelFactoryを使用する

エンドポイントのURLは、構成ファイルからロードできます。より高度な設定では、サービスのディレクトリルックアップを実行して、アプリケーションがデプロイされている環境のURLを取得できます。 https://en.wikipedia.org/wiki/Service_provider_interface

https://github.com/jolmari/netcore-wcf-service-proxy

ASP.NET Core Webアプリケーションでプロキシ実装を使用して複数のWCFサービスを使用する例。

0
ofthelit