У меня установлена 32-разрядная версия Windows 7 Максимальная. Запуск бета-версии 2 Visual Studio 2010 для .Net 4.
У меня есть проект, содержащий сервисные контракты.
Проект, содержащий сервисы.
И веб-приложение ASP.NET, которое размещает сервисы в ИИС.
Я написал свои собственные клиенты, используя ChannelFactory().CreateChannel()...
Всякий раз, когда я запускаю свое приложение, которое использует ServiceClient и вызывает метод службы, я получаю эту ошибку:
An attempt was made to load a program with an incorrect format.
(Exception from HRESULT: 0x8007000B)
Я попытался добавить ссылку на службу в VS, чтобы клиент службы генерировался автоматически и ничего не менял.
Затем я попытался создать новое приложение-службу WCF из категории «Веб» в VS2010, добавив ссылку на службу и вызвав стандартный метод GetData. Он отлично работает, поэтому наверняка моя служба или хостинг службы не работают...
ОБНОВЛЕНИЕ
Я заметил, что эта ошибка присутствует только при использовании 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 и посмотреть служебную информацию...