Моя система - 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 и просмотреть информацию об услуге ...