BadImageFormatException IIS размещал службу WCF Win7 x86, VS2010b2 - PullRequest
1 голос
/ 24 октября 2009

Моя система - Windows 7 Ultimate 32 бит. Запуск бета-версии Visual Studio 2010 с таргетингом на .Net 4.

У меня есть проект, содержащий контрактов на обслуживание .
Проект, содержащий сервисы .
И веб-приложение ASP.NET, которое размещает службы в IIS .

Я написал своих собственных клиентов, используя ChannelFactory (). CreateChannel () ...

Всякий раз, когда я запускаю свое приложение, которое использует ServiceClient и вызывает метод в службе, я получаю эту ошибку:

An attempt was made to load a program with an incorrect format. 
   (Exception from HRESULT: 0x8007000B)

Я попытался добавить ссылку на службу в VS, чтобы клиент службы был создан автоматически, и это ничего не меняет.

Затем я попытался создать новое приложение-службу WCF из категории Web в VS2010, добавив ссылку на службу и вызвав стандартный метод GetData. Это работает нормально, так что точно мой сервис или хостинг службы работают неправильно. ...

UPDATE

Я заметил, что эта ошибка присутствует только при использовании wsHttpBindings. basicHttpBindings работает отлично.

Вот как я создаю экземпляр службы:

private IAdminService _AdminService;

public AdminServiceClient()
{
    _AdminService = new ChannelFactory<IAdminService>(String.Empty)
                        .CreateChannel();
}

Настройки клиента:

<system.serviceModel>
    <client>
        <endpoint address="http://AdminServices/svcs/AdminService.svc"  
                  binding="wsHttpBinding"  
                  contract="MyApp.Admin.Model.ServiceContracts.IAdminService" />
    </client>
</system.serviceModel>

Мой сервис выглядит так:

public class AdminService : IAdminService
{
    public User GetUserByEmail(string email)
    {
        throw new NotImplementedException();
    }

    public void CreateUser(string fullname, string email, 
              string encryptedPassword, 
              string encryptedPasswordQuestion, 
              string encryptedPasswordAnswer)
    {
        throw new NotImplementedException();
    }

    public IEnumerable<Application> GetApplications()
    {
        IEnumerable<Application> apps = new List<Application>();
        // Call data access layer method to retrieve Applications
        return apps;
    }

    public IEnumerable<ApplicationInstance> GetApplicationInstances(
                                             long? applicationId)
    {
        throw new NotImplementedException();
    }

    public Dictionary<string, string> GetApplicationsAndInstances()
    {
        Dictionary<string, string> appsAndInstances = 
                 new Dictionary<string, string>();
        appsAndInstances.Add("Dummy 1", "1");
        appsAndInstances.Add("Dummy 2", "2");
        return appsAndInstances;
    }
}

Мой файл AdminService.svc выглядит следующим образом:

<%@ ServiceHost Service="MyApp.Admin.Services.AdminService" %>

Конфигурация My Service Host выглядит следующим образом:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true"
                 targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="MyApp.Admin.Services.AdminService">
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="MyApp.Admin.Model.ServiceContracts.IAdminService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
           <serviceMetadata httpGetEnabled="true"/>
           <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

Я также пытался создать новое консольное приложение и добавить ссылку на службу в http://AdminServices/svcs/AdminService.svc - это тоже не работает.

Я добавил AdminServices в мой файл hosts, и я могу просмотреть http://AdminServices/svcs/AdminService.svc и просмотреть информацию об услуге ...

1 Ответ

2 голосов
/ 25 октября 2009

Наиболее очевидной причиной может быть то, что вы загружаете 64-битную DLL в 32-битный процесс или наоборот. Однако, учитывая, что вы запускаете все на 32-битной версии, я полагаю, что это не так.

Другой вариант - ошибка .NET, использующая общее ограничение:

public class SpecificClass: BaseClass: where T : class { }

Если вы удалите класс where T: он должен нормально работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...