Как определить конечную точку WCF в функции Azure? - PullRequest
0 голосов
/ 16 октября 2019

Я работал с этим решением, где клиентское приложение должно получать доступ к службе WCF через ретранслятор.

Я следовал этому руководству и смог получить доступ к службе WCF, размещенной в консольном приложении, с помощью клиентского консольного приложения.

Я хочу добиться того, чтобы получить доступ к службе WCF, размещенной на локальной машине, черезПриложение функции.

Итак, я перенес код, который я сделал в приложении консоли клиента, как показано здесь , в приложение функции Azure.

Приложение консоли клиента имело файл конфигурациикак показано здесь

У меня есть 2 сомнения

У меня есть два сомнения.

1) Я не могу понять, какопределить конечную точку в приложении-функции Azure, которое было определено в файле App.Config для консольного приложения, как показано ниже.

<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();

Кто-нибудь может подсказать, как с этим работать?

1 Ответ

1 голос
/ 16 октября 2019

Синтаксис для создания привязок в коде сопоставляется с XML в app.config, и вы можете использовать его так:

var endpoint = new EndpointAddress(serviceUri);
var binding = new NetTcpRelayBinding()
{
     // Example properties that might be in your app.config
     ReceiveTimeout = TimeSpan.FromMinutes(2),
     SendTimeout = TimeSpan.FromMinutes(2),
};

var channelFactory = new ChannelFactory<IEchoChannel>(binding, endpoint);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...