我的系统是Windows 7 Ultimate 32位。运行Visual Studio 2010 beta 2,目标是.Net 4.
我有一个包含服务合同的项目 包含服务的项目 以及在IIS中托管服务的ASP.NET Web应用程序。
我使用ChannelFactory()创建了自己的客户端.CreateChannel()......
每当我运行使用ServiceClient的应用程序并在服务上调用方法时,我都会收到此错误:
An attempt was made to load a program with an incorrect format.
(Exception from HRESULT: 0x8007000B)
我尝试在VS中添加服务引用,以便自动生成服务客户端,并且不会更改任何内容。
然后我尝试从VS2010中的Web类别创建一个新的WCF服务应用程序,添加一个服务引用并调用标准的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" %>
我的服务主机配置如下所示:
<?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并查看服务信息......
答案 0 :(得分:2)
最明显的原因是您将64位DLL加载到32位进程中,反之亦然。但是,鉴于您在32位开发盒上运行所有内容,我认为情况并非如此。
另一个选项是使用如下通用约束的.NET错误:
public class SpecificClass: BaseClass: where T : class { }
如果删除where T:class,它应该可以正常工作。