Задать вопрос
@Jut_Rut

Не работает подключение к удалённому серверу, как исправить?

Выдаёт разные ошибки:
Подключение к сокету было прервано. Возможно, это вызвано ошибкой обработки сообщения, превышением времени ожидания на удаленном узле или проблемой с выделенным сетевым ресурсом. Тайм-аут локального сокета: "00:00:59.8087818"
или
Коммуникационный объект System.ServiceModel.Channels.ServiceChannel нельзя использовать для связи, так как он находится в состоянии Faulted.

Брандмаузер выглядит вот так:
6404735e090dd217322236.png
Как видно, хост включён

Проверял через netstat -a: прослушивание идёт, порты с 7000 - 8000 открыты, когда клиент и сервер на одной машины программа работает

Конфиг клиента :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_ICalculator" />
            </basicHttpBinding>
            <netTcpBinding>
                <binding name="NetTcpBinding_ICalculator">
                    <security>
                        <transport sslProtocols="None" />
                    </security>
                </binding>
            </netTcpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost:7877/WcfSimpleProject.Calculator"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICalculator"
                contract="Calc.ICalculator" name="BasicHttpBinding_ICalculator" />
            <endpoint address="net.tcp://"тот ip, на котором запущен хост":7897/WcfSimpleProject.Calculator"
                binding="netTcpBinding" bindingConfiguration="NetTcpBinding_ICalculator"
                contract="Calc.ICalculator" name="NetTcpBinding_ICalculator">
                <identity>
                    <userPrincipalName value="" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>


Конфиг хоста:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
	<system.serviceModel>
		<services>
			<service name="WcfSimpleProject.Calculator" behaviorConfiguration="MexB">
				<endpoint address="WcfSimpleProject.Calculator" binding="basicHttpBinding" contract="WcfSimpleProject.ICalculator"></endpoint>
				<endpoint address="WcfSimpleProject.Calculator" binding="netTcpBinding" contract="WcfSimpleProject.ICalculator"></endpoint>
				<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
				<host>
					<baseAddresses>
						<add baseAddress="http://localhost:7877/"/>
						<add baseAddress="net.tcp://"ip хоста"/"/>
					</baseAddresses>
				</host>
			</service>
		</services>
		<behaviors>
			<serviceBehaviors>
				<behavior name="MexB">
					<serviceMetadata httpGetEnabled="true"/>
				</behavior>
			</serviceBehaviors>
		</behaviors>
	</system.serviceModel>
</configuration>


А вот код клиента:
using CalcClient.Calc;
using System;

namespace CalcClient
{
    internal class Program
    {
        private static CalculatorClient client = new CalculatorClient("NetTcpBinding_ICalculator");

        static void Main(string[] args)
        {
            string inputStr = null;

            while (inputStr != "close")
            {
                inputStr = Console.ReadLine();
                try 
                {
                    ChooseRealisation(ParseInputStr(inputStr));
                }
                catch(Exception ex) 
                { 
                    Console.WriteLine(ex.Message);
                    Console.ReadLine();
                }
            }
        }

        private static string[] ParseInputStr(string input)
        {
            return input.Split(' ');
        }

        private static void ChooseRealisation(string[] parsedInputString)
        {
            switch(parsedInputString[1])
            {
                case "+":
                    client.Plus(Convert.ToInt32(parsedInputString[0]), Convert.ToInt32(parsedInputString[2]));
                    break;
                case "-":
                    client.Minos(Convert.ToInt32(parsedInputString[0]), Convert.ToInt32(parsedInputString[2]));
                    break;
                case "*":
                    client.Multiple(Convert.ToInt32(parsedInputString[0]), Convert.ToInt32(parsedInputString[2]));
                    break;
                case "/":
                    client.Divide(Convert.ToInt32(parsedInputString[0]), Convert.ToInt32(parsedInputString[2]));
                    break;

                default: 
                    Console.WriteLine("Данные были введены некорректно");
                    break;
            }
        }
    }
}


Проблема предположительно в том, что клиент просто не может подключиться. Искренне не понимаю почему. Ip белый, версия сервера Windows Server 2012 R2. Если брандмаузер не трогать, то просто выводится о шибка о неподключении через 21 секунду

Есть правило для портов, используемых мною:
64047a7a904ec405296014.png
  • Вопрос задан
  • 587 просмотров
Подписаться 1 Средний 7 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы