Давайте представим себе такой сценарий:
У вас есть WCF услуга, размещенная в рабочем роли с внутренней точкой. Он реализует контракт ICalculator, который представляет собой простой калькулятор (ADD, Mult ... и т. Д.).
На другом конце у вас есть приложение Webform, когда кнопка Щелкнув, вы просто отправляете некоторые данные для расчета.
вот код для употребления этого веб-сервиса:
protected void Button1_Click(object sender, EventArgs e)
{
var factory = new ChannelFactory<WorkerHost.ICalculator>(new NetTcpBinding(SecurityMode.None));
var channel = factory.CreateChannel(GetRandomEndpoint());
Label3.Text =channel.Add (Convert.ToInt32(TextBox1.Text) , Convert.ToInt32(TextBox2.Text)).ToString();
}
и код для getRanDomeEndpoint() является
private EndpointAddress GetRandomEndpoint()
{
var endpoints= RoleEnvironment.Roles["WorkerHost"].Instances.Select(i=>i.InstanceEndpoints["CalculatorService"].IPEndpoint).ToArray();
var r = new Random(DateTime.Now.Millisecond);
return new EndpointAddress(string.Format("net.tcp://{0}/Calculate", endpoints[r.Next(endpoints.Count() - 1)]));
}
Я загрузил обслуживание на лазурное проверить его здесь
http://workerrolewcf.cloudapp.net/default.aspx
Благодарим вас за простой пример. Разный вопрос: внутренние службы tcp должны отображаться через роль рабочего? или они могут быть открыты через веб-роль? –
Они используются для межпроцессорной связи, поэтому вы можете либо опубликовать их через веб-страницу, либо роль рабочего. В большинстве случаев они используются для роли рабочего, поскольку веб-роль уже размещена в IIS – Coder1409