WCF асинхронный вызов - исключение в обработчике событий - PullRequest
0 голосов
/ 02 декабря 2011

Асинхронный вызов WCF - Исключение в обработчике событий

Я выполняю асинхронный вызов метода WCF с обработчиком событий.Я получаю сообщение об ошибке при событии EventAddCallback, а ошибка e.Error показывает следующую ошибку.Кто-нибудь знает почему?Я добавил пример кода, информацию об ошибке, информацию трассировки и параметры, которые я пытался ..

System.Reflection.TargetInvocationException: во время операции произошло исключение, делающее результат недействительным.Проверьте InnerException для подробностей исключения.---> System.ServiceModel.CommunicationException: произошла ошибка при получении ответа HTTP на https://demosite.com/ourservice.asmx. Это может быть связано с тем, что привязка конечной точки службы не использует протокол HTTP.Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы).Смотрите журналы сервера для более подробной информации.---> System.Net.WebException: базовое соединение было закрыто: при получении произошла непредвиденная ошибка.---> System.IO.IOException: невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом.---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрыто удаленным хостом

Я включил трассировку, и он показывает ..

System.ServiceModel.CommunicationException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
An error occurred while receiving the HTTP response to https://demosite.com/ourservice.asmx. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.
-->System.Net.WebException, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-->The underlying connection was closed: An unexpected error occurred on a receive.
------>System.IO.IOException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
------>Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
---------->System.Net.Sockets.SocketException, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
---------->An existing connection was forcibly closed by the remote host


Options I tried..
1. Increased 
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
              maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>

2. Enabled 'Keep Alive', increased buffer size(s)
<httpsTransport maxReceivedMessageSize="2147483647" keepAliveEnabled="true" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" />              

3. added endpointBehaviors

      <endpointBehaviors>
        <behavior name="demo">
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </endpointBehaviors>

    class Program
    {
        static ManualResetEvent closeapp = new ManualResetEvent(false);
        static void Main(string[] args)
        {
            wcfclient.AddCompleted += new EventHandler<AddCompletedEventArgs>(EventAddCallback);
            wcfclient.AddAsync(employees);
            closeapp.WaitOne(); 
        }
        static void EventAddCallback(object sender, AddCompletedEventArgs e)
        {
            try
            {
                if (e.Error != null)
                {
                    wcfclient.Close();
                    closeapp.Set(); 
                }else
                {
                   //Continue with other calls.
                }
            }
            catch (Exception ex) {
                throw ex;
            }
        }
    }

1 Ответ

1 голос
/ 03 декабря 2011

У вас неправильный виндиг безопасности для привязки. Либо вы должны переключиться на http (что вы, вероятно, не можете из-за настройки сервера), либо вам следует переключиться на Transport Security в конфигурации привязки клиента.

...