开发者

BadImageFormatException IIS hosted WCF service Win7 x86, VS2010b2

开发者 https://www.devze.com 2022-12-09 03:24 出处:网络
My system is Windows 7 Ultimate 32 bit. Running Visual Studio 2010 beta 2 targeting .Net 4. I have a project containing service contracts.

My system is Windows 7 Ultimate 32 bit. Running Visual Studio 2010 beta 2 targeting .Net 4.

I have a project containing service contracts.

A project containing the services.

And an ASP.NET Web Application that is hosting the services in IIS.

I've written my own Clients using the ChannelFactory().CreateChannel()...

Whenever I run my application that uses the ServiceClient and calls a method on the service, I get this error:

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

I've tried to add a service reference in VS, so that the service client is auto-generated and that doesn't change anything.

Then I tried to create a new WCF Service Application from the Web category in VS2010, adding a service reference and calling the standard GetData method That works fine, so it is for sure my service or the hosting of the service that goes wrong...

UPDATE

I noticed that this error was only present when using wsHttpBindings. basicHttpBindings works fine.

This is how I instantiate the service:

private IAdminService _AdminService;

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

Client config settings:

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

My service looks like this:

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<App开发者_C百科lication>();
        // 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;
    }
}

My AdminService.svc file looks like this:

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

My Service Host config looks like this:

<?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>

I've also tried to create a new Console App, and add a service reference to http://AdminServices/svcs/AdminService.svc - that doesn't work either.

I've added AdminServices to my hosts file, and I can browse http://AdminServices/svcs/AdminService.svc and see the service information...


The most obvious cause would be that you are loading a 64 bits DLL into a 32 bits process or visa versa. However given that you are running everything on a a 32 bits development box I assume this isn't the case.

The other option is a .NET bug using a generic constraint like this:

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

If you remove the where T : class it should work just fine.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号