クライアントアプリケーションがリレー経由でWCFサービスにアクセスすることになっているこのソリューションを使用しています。
このチュートリアルに従って、コンソール アプリでホストされている WCF サービスにクライアント コンソール アプリでアクセスできました。
私が達成したいのは、関数アプリを介してローカル マシンでホストされている WCF サービスにアクセスすることです。
そこで、ここに示すようにクライアント コンソール アプリで行ったコードをAzure 関数アプリに移行しました。
クライアント コンソール アプリには、次のような構成ファイルがありました
2つ疑問があります
私には2つの疑問があります。
1)コンソール アプリの場合、以下のように App.Config ファイルで定義された azure 関数アプリでエンドポイントを定義する方法がわかりません。
<client>
<endpoint name="RelayEndpoint"
contract="Microsoft.ServiceBus.Samples.IEchoContract"
binding="netTcpRelayBinding"/>
</client>
2)関数アプリのコードでエンドポイントを動的に定義する方法はありますか?
log.Info("C# HTTP trigger function processed a request.");
ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
string serviceNamespace = "MyTestRelay";
string sasKey = "mpQKrfJ6L4Ftdsds2v6Leg3X0e9+Q8MOfjxwghj7xk2qSA=";
Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
TransportClientEndpointBehavior sasCredential = new TransportClientEndpointBehavior();
sasCredential.TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", sasKey);
DynamicEndpoint dynamicEndpoint = new DynamicEndpoint(ContractDescription.GetContract(typeof(IEchoContract)), new WSHttpBinding() );
//行の下でエラーが発生しています
ChannelFactory<IEchoChannel> channelFactory = new ChannelFactory<IEchoChannel>("RelayEndpoint", new EndpointAddress(serviceUri));
channelFactory.Endpoint.Behaviors.Add(sasCredential);
IEchoChannel channel = channelFactory.CreateChannel();
channel.Open();
Console.WriteLine("Enter text to echo (or [Enter] to exit):");
string input = Console.ReadLine();
while (input != String.Empty)
{
try
{
Console.WriteLine("Server echoed: {0}", channel.Echo(input));
}
catch (Exception e)
{
Console.WriteLine("Error: " + e.Message);
}
input = Console.ReadLine();
}
channel.Close();
channelFactory.Close();
誰でもこれを操作する方法を提案できますか?