Я получил исключение, когда запускаю консольное приложение C # на удаленном сервере - невозможно установить соединение, потому что целевой компьютер активно отказался от него - PullRequest
1 голос
/ 06 июля 2019

Я написал небольшую программу для загрузки файлов из Oracle в SharePoint онлайн. Он работает нормально на моей локальной рабочей станции. Но он не может быть запущен на других локальных рабочих станциях и удаленных серверах. Я получил исключение ниже, когда опубликовал его как отдельное приложение для удаленного рабочего стола. Я проверил свой брандмауэр. Брандмауэр выключен на удаленном сервере и локальной рабочей станции

Вот код. Я использовал оператор print, чтобы проверить, какая строка кода не работает.

namespace sharepoint
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Uploading...");
                Console.WriteLine("0");
                ServiceReference1.ServiceClient ws = new ServiceReference1.ServiceClient();
                Console.WriteLine("1");
                ws.start_processAsync().Wait();
                Console.WriteLine("2");
                Console.WriteLine("Upload Finished!");
            }
        }
    }

Результат:

Uploading...
0
1

Тогда я получил исключение.

Unhandled Exception: System.AggregateException: One or more errors occurred. (No connection could be made because the target machine actively refused it) ---> System.ServiceModel.CommunicationException: No connection could be made because the target machine actively refused it ---> System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it ---> System.Net.Sockets.SocketException: No connection could be made because the target machine actively refused it
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
   at System.Threading.Tasks.ValueTask`1.get_Result()
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage request, Uri authUri, ICredentials credentials, Boolean preAuthenticate, Boolean isProxyAuth, Boolean doRequestAuth, HttpConnectionPool pool, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpClientRequestChannel.HttpClientChannelAsyncRequest.SendRequestAsync(Message message, TimeoutHelper timeoutHelper)
   --- End of inner exception stack trace ---
   at System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannelProxy.TaskCreator.<>c__DisplayClass2_0.<CreateTask>b__0(IAsyncResult asyncResult)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at sharepoint.Program.Main(String[] args) in C:\Temp\tmp\fire\SFFD\sharepoint\WebService\sharepoint\Program.cs:line 13

Вот асинхронный метод. Он автоматически генерируется из моего веб-сервиса, когда я ссылаюсь на метод startProcess () из моего веб-сервиса на это консольное приложение.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

    namespace ServiceReference1
    {
        using System.Runtime.Serialization;


        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.1-preview-30310-0943")]
        [System.Runtime.Serialization.DataContractAttribute(Name="CompositeType", Namespace="http://schemas.datacontract.org/2004/07/")]
        public partial class CompositeType : object
        {

            private bool BoolValueField;

            private string StringValueField;

            [System.Runtime.Serialization.DataMemberAttribute()]
            public bool BoolValue
            {
                get
                {
                    return this.BoolValueField;
                }
                set
                {
                    this.BoolValueField = value;
                }
            }

            [System.Runtime.Serialization.DataMemberAttribute()]
            public string StringValue
            {
                get
                {
                    return this.StringValueField;
                }
                set
                {
                    this.StringValueField = value;
                }
            }
        }

        [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.1-preview-30310-0943")]
        [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ServiceReference1.IService")]
        public interface IService
        {

            [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/GetData", ReplyAction="http://tempuri.org/IService/GetDataResponse")]
            System.Threading.Tasks.Task<string> GetDataAsync(int value);

            [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/GetDataUsingDataContract", ReplyAction="http://tempuri.org/IService/GetDataUsingDataContractResponse")]
            System.Threading.Tasks.Task<ServiceReference1.CompositeType> GetDataUsingDataContractAsync(ServiceReference1.CompositeType composite);

            [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/start_process", ReplyAction="http://tempuri.org/IService/start_processResponse")]
            System.Threading.Tasks.Task start_processAsync();
        }

        [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.1-preview-30310-0943")]
        public interface IServiceChannel : ServiceReference1.IService, System.ServiceModel.IClientChannel
        {
        }

        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.1-preview-30310-0943")]
        public partial class ServiceClient : System.ServiceModel.ClientBase<ServiceReference1.IService>, ServiceReference1.IService
        {

            /// <summary>
            /// Implement this partial method to configure the service endpoint.
            /// </summary>
            /// <param name="serviceEndpoint">The endpoint to configure</param>
            /// <param name="clientCredentials">The client credentials</param>
            static partial void ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint serviceEndpoint, System.ServiceModel.Description.ClientCredentials clientCredentials);

            public ServiceClient() : 
                    base(ServiceClient.GetDefaultBinding(), ServiceClient.GetDefaultEndpointAddress())
            {
                this.Endpoint.Name = EndpointConfiguration.BasicHttpBinding_IService.ToString();
                ConfigureEndpoint(this.Endpoint, this.ClientCredentials);
            }

            public ServiceClient(EndpointConfiguration endpointConfiguration) : 
                    base(ServiceClient.GetBindingForEndpoint(endpointConfiguration), ServiceClient.GetEndpointAddress(endpointConfiguration))
            {
                this.Endpoint.Name = endpointConfiguration.ToString();
                ConfigureEndpoint(this.Endpoint, this.ClientCredentials);
            }

            public ServiceClient(EndpointConfiguration endpointConfiguration, string remoteAddress) : 
                    base(ServiceClient.GetBindingForEndpoint(endpointConfiguration), new System.ServiceModel.EndpointAddress(remoteAddress))
            {
                this.Endpoint.Name = endpointConfiguration.ToString();
                ConfigureEndpoint(this.Endpoint, this.ClientCredentials);
            }

            public ServiceClient(EndpointConfiguration endpointConfiguration, System.ServiceModel.EndpointAddress remoteAddress) : 
                    base(ServiceClient.GetBindingForEndpoint(endpointConfiguration), remoteAddress)
            {
                this.Endpoint.Name = endpointConfiguration.ToString();
                ConfigureEndpoint(this.Endpoint, this.ClientCredentials);
            }

            public ServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : 
                    base(binding, remoteAddress)
            {
            }

            public System.Threading.Tasks.Task<string> GetDataAsync(int value)
            {
                return base.Channel.GetDataAsync(value);
            }

            public System.Threading.Tasks.Task<ServiceReference1.CompositeType> GetDataUsingDataContractAsync(ServiceReference1.CompositeType composite)
            {
                return base.Channel.GetDataUsingDataContractAsync(composite);
            }

            public System.Threading.Tasks.Task start_processAsync()
            {
                return base.Channel.start_processAsync();
            }

            public virtual System.Threading.Tasks.Task OpenAsync()
            {
                return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginOpen(null, null), new System.Action<System.IAsyncResult>(((System.ServiceModel.ICommunicationObject)(this)).EndOpen));
            }

            public virtual System.Threading.Tasks.Task CloseAsync()
            {
                return System.Threading.Tasks.Task.Factory.FromAsync(((System.ServiceModel.ICommunicationObject)(this)).BeginClose(null, null), new System.Action<System.IAsyncResult>(((System.ServiceModel.ICommunicationObject)(this)).EndClose));
            }

            private static System.ServiceModel.Channels.Binding GetBindingForEndpoint(EndpointConfiguration endpointConfiguration)
            {
                if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_IService))
                {
                    System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
                    result.MaxBufferSize = int.MaxValue;
                    result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
                    result.MaxReceivedMessageSize = int.MaxValue;
                    result.AllowCookies = true;
                    return result;
                }
                throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration));
            }

            private static System.ServiceModel.EndpointAddress GetEndpointAddress(EndpointConfiguration endpointConfiguration)
            {
                if ((endpointConfiguration == EndpointConfiguration.BasicHttpBinding_IService))
                {
                    return new System.ServiceModel.EndpointAddress("http://localhost:53235/Service.svc");
                }
                throw new System.InvalidOperationException(string.Format("Could not find endpoint with name \'{0}\'.", endpointConfiguration));
            }

            private static System.ServiceModel.Channels.Binding GetDefaultBinding()
            {
                return ServiceClient.GetBindingForEndpoint(EndpointConfiguration.BasicHttpBinding_IService);
            }

            private static System.ServiceModel.EndpointAddress GetDefaultEndpointAddress()
            {
                return ServiceClient.GetEndpointAddress(EndpointConfiguration.BasicHttpBinding_IService);
            }

            public enum EndpointConfiguration
            {

                BasicHttpBinding_IService,
            }
        }
    }
...