#wcf #connect
#wcf #Контакты
Вопрос:
Я получил приведенную ниже ошибку при попытке подключиться к службе WCF, запущенной на моем локальном хостинге, с помощью инструмента WCF Test Client. Я ввел адрес конечной точки как «net.tcp: // localhost: 19998 /MyWCFService». MyWCFService запущен в Visual Studio 2017 на моем локальном компьютере.
«Не было никакой конечной точки, прослушивающей net.tcp:// localhost: 19998 / MyWCFService, которая могла бы принять сообщение. Это часто вызвано неправильным адресом или действием SOAP. Смотрите InnerException, если оно присутствует, для получения более подробной информации.»
Я могу проверить, что порт 19998 прослушивается на моем компьютере, используя netstat.
ПРОСЛУШИВАНИЕ TCP 0.0.0.0: 19998
Я отключил все брандмауэры на своем компьютере.
Ответ №1:
Оказывается, в моей службе WCF есть некоторые ошибки во время выполнения, которые запрещают любым клиентам подключаться к ней.. Я исправил ошибки и теперь могу подключиться. Спасибо.
Ответ №2:
Похоже, что ошибка вызвана неправильным адресом службы. Как вы размещаете службу на стороне сервера? Я бы хотел, чтобы вы могли опубликовать более подробную информацию о стороне сервера, чтобы дать вам эффективный ответ.
Вот мой пример использования NetTcpBinding, желаю, чтобы он был вам полезен.
Сервер
class Program
{
static void Main(string[] args)
{
Uri uri = new Uri("net.tcp://localhost:1500");
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
using (ServiceHost sh = new ServiceHost(typeof(Calculator), uri))
{
sh.AddServiceEndpoint(typeof(ICalculator), binding,"");
ServiceMetadataBehavior smb;
smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
smb = new ServiceMetadataBehavior();
//smb.HttpGetEnabled = true;
sh.Description.Behaviors.Add(smb);
}
Binding mexbinding = MetadataExchangeBindings.CreateMexTcpBinding();
sh.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "MEX");
sh.Open();
Console.Write("Service is ready....");
Console.ReadLine();
sh.Close();
}
}
}
[ServiceContract]
public interface ICalculator
{
[OperationContract]
int Test(int a);
}
public class Calculator : ICalculator
{
public int Test(int a)
{
return a * 2;
}
}
Не стесняйтесь, дайте мне знать, если я могу чем-нибудь помочь.