0

クライアントアプリケーションがリレー経由で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();

誰でもこれを操作する方法を提案できますか?

4

1 に答える 1