WCF-произошла ошибка при получении ответа HTTP на http://xxxxx/Service/

прежде чем вы downvote, я знаю, что есть дублирующие вопросы, как этот, но я пытался и не удалось найти решение в них. Может быть, я что-то пропустил, но я все еще относительно новичок в WCF, поэтому некоторые из них немного над моей головой.

я делаю этот вызов в моей службе WCF:

public User GetStudentRecord(string userName)
    {
        try
        {
            return new DashboardFacade().GetStudentRecord(userName);
        }
        catch (Exception ex)
        {
            ServiceFault fault = new ServiceFault();
            fault.Operation = "GetStudentRecord";
            fault.Reason = "Who knows...";
            fault.Message = ex.Message;
            throw new FaultException<ServiceFault>(fault, fault.Message, new FaultCode(fault.Reason), fault.Operation);
        }
    }

DashboardFacade ().GetStudentRecord(..) определяется следующим образом:

public User GetStudentRecord(string userName)
{
    User user = ctx.Users.Where(x => x.ADUserName == userName).SingleOrDefault();
    return user;
}

ctx-это мой DbContext. Сначала я использую код Entity Framework. Объект User выглядит следующим образом:

public class User
{
    public User()
    {
        //UserDetails = new UserDetail();
    }
    [Key]
    public Guid MasterKey { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public string ADUserName { get; set; }
    public string UserType { get; set; }
    public virtual UserDetail UserDetails { get; set; }
    public Nullable<DateTime> LastModifiedDate { get; set; }
}

и, наконец, вам, вероятно, нужно увидеть интернет.конфигурация в приложении WCF:

<?xml version="1.0"?>
    <configuration>
      <connectionStrings>
        <add name="NotMyDBContextDB" connectionString="[omitted]" providerName="System.Data.SqlClient"/>
        <add name="ApplicationContext" connectionString="Data Source=.;Initial Catalog=MyApp;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient"/>
      </connectionStrings>
   <system.web>
     <compilation debug="true" targetFramework="4.0"/>
   </system.web>
   <system.serviceModel>
     <behaviors>
       <serviceBehaviors>
          <behavior>
             <serviceMetadata httpGetEnabled="true"/>
             <serviceDebug includeExceptionDetailInFaults="true"/>
          </behavior>
        </serviceBehaviors>
      </behaviors>
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>

может ли кто-нибудь указать мне, где я ошибаюсь здесь?

это точная ошибка, которую я получаю:

An error occurred while receiving the HTTP response to http://localhost:5843/MyService.svc. 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.

Inner Exception:
The underlying connection was closed: An unexpected error occurred on a receive.

Inner Exception:
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.

Inner Exception:
An existing connection was forcibly closed by the remote host

5 ответов


нашел первопричину после многих ругательств и размышлений о том, как хорошая погода снаружи. Я удаляю ключевое слово virtual из объекта UserDetails, который находится внутри объекта User.

теперь все работает!

что касается того, почему это вызвало проблему, мои предположения-это проблемы сериализации или DbContext, но мне придется больше в этом разобраться, не уверен.


У меня была эта проблема, и в моем случае проблема заключалась в том, что служба WCF возвращала класс, который имел свойство только с геттером и без сеттера. Я пытался предотвратить изменение свойства получателем. Чтобы обойти это, посмотрите на это...

службы WCF и конструкторы объектов


У меня была такая же ошибка.

в моем случае у меня есть таблица с столбцом int под названием OEM. В слое модели у меня есть класс (DTO) с этим столбцом, представленным перечислением. В таблице была строка, значение которой в OEM colum было недопустимым. Когда я пытался принести все данные с помощью LINQ, произошла ошибка, которая не была захвачена VisualStudio. Эта ошибка возникла, когда WCF попытался получить сообщение.


возникает ли ваше исключение при попытке доступа к некоторому полю возвращаемого объекта пользователя?

Если это так, кажется, что ваш объект ctx закрывается вашей службой после вызова GetStudentRecord(). Где вы создаете ctx и как вы открываете / закрываете его?

(из-за требования 50 rep я не мог поместить это в комментарий...поэтому он здесь Вместо ответа)


ни один из методов не работал для меня. То, что я сделал, это отладить службу во время работы с тестовым клиентом WCF, и я смог найти свою проблему. Это связано с тем, что в служебной библиотеке отсутствует строка подключения в приложении.конфиг.

просто сообщение, если кто-то пробовал все другие методы и до сих пор не может найти проблему.