.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コアアプリケーションではミドルウェアとして呼び出されます。
ソリューションに関心がある人のために、各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;
});
多分最高ではないかもしれませんが、それは正常に動作します。
私は.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サービスクライアントを呼び出します
前もって感謝します。
この記事 から理解できるように、これはマイクロソフトの推奨事項です。
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(""));
}
}
}
ここでは、appsettings.json
ファイル
新しいSystem.Uri(configuration.GetValue( "yourServiceAddress")
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サービスを使用する例。