Как определить конечную точку WCF в функции Azure?
Я работал с этим решением, в котором клиентское приложение должно получать доступ к службе WCF через Relay.
Я выполнил это руководство и смог получить доступ к службе 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 ответ
Синтаксис для создания привязок в коде отображается на 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);