78

I'm trying to host my service with IIS 6 but I keep get this exception.

    Server Error in '/WebServices' Application.
--------------------------------------------------------------------------------

The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[InvalidOperationException: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.]
   System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +6714599
   System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +604
   System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +46
   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +654

[ServiceActivationException: The service '/WebServices/dm/RecipientService.svc' cannot be activated due to an exception during compilation.  The exception message is: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found..]
   System.ServiceModel.AsyncResult.End(IAsyncResult result) +15626880
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +15546921
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +265
   System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +227
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082 

I have absolutely no clue except that it seems like it can't find my assemblies. The code should be correctly compiled with public classes.

Here is my .svc file:

<%@ ServiceHost Language="C#" Debug="true" Service="QS.DialogManager.Communication.IISHost.RecipientService" CodeBehind="RecipientService.svc.cs" %>

I have tried to create a very very simple service that contains just nothin too see if this would work but still the same old error shows up.

The type 'IISHost.Service1', provided as the Service attribute value in the ServiceHost directive could not be found. 
nandarya
  • 863
  • 1
  • 6
  • 12

22 Answers22

73

The problem could also be a in a different namespace in svc file as it is in svc.cs file.

In svc file namespace must be in the following format.

Service="Namespace.SvcClassName"
Peter Stegnar
  • 12,615
  • 12
  • 62
  • 80
  • 1
    This is espcially common in VS Express which does not have refactoring support and the IDE does not easily display the content of the svc file. – Chriseyre2000 Mar 11 '12 at 11:10
  • 2
    This was my exact problem. I went through my solution and seperated out the namespaces between the two projects within the solution and forgot to update the .svc reference. – Nip Jul 05 '12 at 18:38
  • 2
    You nailed it, most tuitorials on the web are placing a name space around the sample WCF service and interface and it needs to be brought to the service.svc page. – htm11h May 16 '14 at 18:54
  • 2
    This helped me. I changed my namespace but couldnt figure out how to open the service file (servicename.svc) in VS2010 Express. I ended up going to the file system and opening the file directly into notepad++ and editing it in there. – Andrew MacNaughton Nov 07 '14 at 19:13
67

Option One:

This message is often due to an IIS 7 config problem. If you are used to creating a virtual directory pointing to the folder where your service resides, that no longer works. Now, you need to use the "Create Application..." option instead.

Other Options:

Konstantin Tarkus
  • 37,618
  • 14
  • 135
  • 121
  • 1
    Where can I find this option on IIS 6? – nandarya Apr 06 '09 at 09:48
  • 2
    Verify that virtual folder in IIS6 is a web application – Konstantin Tarkus Apr 06 '09 at 09:53
  • Tried it and got some more information: "Could not load file or assembly 'SomeOtherAssembly' or one of its dependencies. The system cannot find the file specified." – nandarya Apr 06 '09 at 10:01
  • 2
    Have you copy it to the bin directory under the vroot? – Konstantin Tarkus Apr 06 '09 at 10:04
  • Yes, I have a copy right under the virtual root. Also tried to copy it to WINDOWS/Microsoft.NET/FRAMEWORK64/... folder but still no result. – nandarya Apr 06 '09 at 10:12
  • "under the virtual root" or into /bin folder under the virtual root? – Konstantin Tarkus Apr 06 '09 at 10:23
  • Yes, I've tried that too but with no result. Trying to find out if all other assemblies is correctly installed. Thanks for all your help. It's very appreciated! – nandarya Apr 06 '09 at 10:27
  • 4
    Yes, now it works! I missunderstood you before and solved the problem making the subfolder to a virtual app. Thanks a lot! – nandarya Apr 06 '09 at 11:27
  • +1 for the JoyOfCode ref - pointed us in the right direction to work out what was going on :) – Zhaph - Ben Duguid Jun 03 '09 at 14:02
  • I installed my WCF service with an MSI which specified the virtual directory, and by going into IIS 7, clicking on that virtual directory, and then clicking on "Convert To Application", I no longer got the error. – ALEXintlsos Jul 18 '12 at 19:25
  • 3
    In my case it turned out that project output was out of web site folder (fixed by changing output folder to 'bin\') – Pavel Shkleinik Dec 04 '13 at 19:09
  • Having converted a Class Library to a WebApplication the hacky way (csproj edititing) the output folder was bin\Debug. Setting it to bin\ solved it. – Wolf5 Apr 30 '14 at 15:35
  • Solved by doing just opposite, service inside application was previosly converted to application, i converted it to virtual directory by clicking Remove Application – donstack Sep 26 '14 at 07:43
  • Converting the virtual directory to application did the trick. Thank you @KonstantinTarkus – Mikayil Abdullayev Jan 15 '16 at 06:38
34

I know this is probably the "obvious" answer, but it tripped me up for a bit. Make sure there's a dll for the project in the bin folder. When the service was published, the guy who published it deleted the dlls because he thought they were in the GAC. The one specifically for the project (QS.DialogManager.Communication.IISHost.RecipientService.dll, in this case) wasn't there.

Same error for a VERY different reason.

baileyrt
  • 626
  • 7
  • 13
12

This error occurs due to mismatch of Service name in .SVC file. Probably you might have changed the name of the service class that is implementing the interface.The Solution is to open .SVC file and exactly match the Service attribute and CodeBehind Attribute. So your .SVC file should be like

<%@ ServiceHost Language="Language you are using" Debug="bool value to enable debugging" Service="Service class name that is implementing your Service interface" Codebehind="~/Appcode/Class implementing interface.cs"%>. for eg.

<%@ ServiceHost Language="C#" Debug="true" Service="Product.Service" CodeBehind="~/AppCode/Product.Service.cs"%>

This example is for .svc file that is using C# language, with debugging enabled, Service class implementing interface and this class is within app folder with name Service.cs and Product is namespace for Service class.

Also Please make respective change in service config file.

<system.serviceModel>
    <services>
        <service name="Product.Service" behaviorConfiguration="ServiceBehavior">
            <endpoint address="" binding="wsHttpBinding" contract="Product.Iservice">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        </service>
    </services>
    <behaviors>
        <behavior name="ServiceBehavior">
            <serviceMetaData httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
    </behaviors>
</system.serviceModel>
Nozim Turakulov
  • 869
  • 1
  • 9
  • 19
Chandra Malla
  • 2,399
  • 22
  • 12
  • 1
    This was my problem, I later moved my .svc file into "Client" subfolder. Service directive inside .svc file was missing this new folder/namespace: `Service="MyServicesProxy.Client.OpenClientService"` – Iztoksson Mar 09 '16 at 11:13
  • Just note also that the service name is case-sensitive! As a vb.net developer, that tricked me! – J.Hudler Aug 09 '17 at 20:17
9

Double check that you're referencing the correct type from the ServiceHost directive in the .svc file. Here's how...

  1. In the VS project containing your web service, open the .svc file in the XML editor (right-click the file, Open With..., choose XML (Text) Editor, OK).
  2. Note the "Service" attribute value.
  3. Make sure it matches the fully qualified type name of your service. This includes the namespace + type name. For example, if the namespace is "MyCompany.Department.Services" and the class is called "MyService", then the Service attribute value should be "MyCompany.Department.Services.MyService".
charlie249
  • 91
  • 1
  • 1
  • You should open SVC files in the Web Service Editor (the default) because the XML editor will give you XML validation errors. – DanM7 Jun 05 '15 at 17:29
7

I had the same Exception, this is due to the Type not correctly mentioned in the .svc file

I corrected with below fix.

if your .svc.cs has class like this

namespace Azh.Services.MyApp
{
    public class WcfApp : FI.IWcfAppService
{
...
}
}

for this the .svc file should look like this

<%@ ServiceHost Language="C#" Debug="true" Service="Azh.Services.MyApp.WcfApp" CodeBehind="WcfApp.svc.cs" %>
zakirhas7
  • 221
  • 3
  • 6
5

You should configure your bin folder path to service local bin.

Kishor
  • 51
  • 1
  • 1
  • 1
    Indeed, copying the DLL to a folder in the same path as svc file worked. `C:\Folder\SVC_ServiceFolder\bin`. I had to remove some duplicate config tags. – Junior Mayhé Oct 14 '11 at 19:50
3

If you have renamed anything verify the (Properties/) AssemblyInfo.cs is correct, as well as the header in the service file.

ServiceName.svc

<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.WcfApp" CodeBehind="WcfApp.svc.cs" %>

Aligning with your namespace in your Service.svc.cs

lko
  • 8,161
  • 9
  • 45
  • 62
2

I had this problem - my service type was in the GAC. It WOULD work if i added the dll containing the type to the bin folder but as it was in the GAC this was NOT what I wanted. I eventually added this to the web.config for the service

<system.web>
    <customErrors mode="RemoteOnly" />
    <compilation debug="true" targetFramework="4.0">
        <assemblies>
            <add assembly="[name in GAC], Version=[version in GAC], Culture=neutral, PublicKeyToken=[ac token]" />
        </assemblies>
    </compilation>
</system.web>

and it worked without needing any dlls in the bin folder.

LPL
  • 16,827
  • 6
  • 51
  • 95
Jason9364
  • 21
  • 1
  • Useful script to get the qualified names of dlls: https://stackoverflow.com/a/17396640/681538 – Alex Oct 09 '19 at 15:52
2

I practically solved the same issue . Here is my suggestion -- The error means that the object referenced in the Service attribute is not found. For the object to be found, the application or library must build output to the bin folder.

You can edit property page of the application and specify the output path to 'bin'.

Dayakumar
  • 21
  • 1
  • Yes, my project properties had "bin\Debug" for output path - changed it to just "bin\". Might be related to the fact that this was a very old project file now used in VS2017. – joanygaard Dec 06 '17 at 12:00
1

Two keys to this for certain flavors of the ' Service attribute value in the ServiceHost directive could not be found'-problem: (1) If you're working in Silverlight, you should use the Silverlight WCF-Enabled Service, not the non-Silverlight WCF Service; this will update Web.Config for the bindings and allow the type to be visible; (2) Match the class name in the new service to the Service name -- the goal here is to make a wsdl... so that you know the service's functionality is exposed to your Silverlight client and to the Web; it helps to have the service match the class. If you get the names gummed up, you will have to edit the Web.Config in 3 places (serviceBehaviors, services and bindings).

There were so many sincere attempts to help folks with this problem that were not helpful to me that it should be stressed that this write-up is for a Silverlight solution and it may not apply for someone not using Silverlight 3 in a client/Web configuration.

Hope it helps.

1

I had the same problem but no clue what caused it. I Solved it by changing from Debug to Release and Run using Debug/Start New Instance. After that, it ran in both Release and Debug. It was magic...

Clayton
  • 11
  • 1
  • This happens to be when I have a Web UI and and Web Service project in the same solution. The Web Service does not compile if its not understood as a dependency for the Web UI. – StingyJack Mar 30 '16 at 17:38
1

I had my service dll's in the bin folder where the svc file was residing. Moving the dll's to the root bin folder solved the problem.

Mikayil Abdullayev
  • 12,117
  • 26
  • 122
  • 206
1

In my case Right Click on Virtual Directory and Select "Convert To Application" worked!

Atul K.
  • 101
  • 2
  • 2
1

I also ran into this issue trying the Microsoft.ServiceModel.Samples.Calculator WCF sample. I am using IIS 5.1. I resolved it by ensuring that the website that was auto-generated (servicemodelsamples) was not an application. Right-click the folder, click "Properties" and click the "Create" button.

amgray789
  • 23
  • 5
1

I faced with this error today, reason was; IIS user doesn't have permission to reach to the application folder. I gave the read permissions to the app root folder.

Fatih Çelik
  • 401
  • 7
  • 16
1

This may sound trivial, but worth mentioning: You have to build the service (in Visual Studio) - then a DLL will be created in the bin subfolder.

When the service is "deployed" on a server - that bin folder needs to have that DLL file in it - otherwise this error will be thrown...

Yuval A.
  • 5,849
  • 11
  • 51
  • 63
0

I got this error when trying to add the Service reference for the first Silverlight enabled WCF in the same solution. I just build the .Web project and it started working..

AnoojNair
  • 491
  • 3
  • 11
  • 18
0

I had the same problem, found this thread, tried all but nogo.

Then I spend another 4 hours wasted time.

Then I found that the compilation settings had changed from 64bits to x86. When I changed it back to 64bits it worked. Don't know exactly why but could be that the IIS application pool was not set to allow 32 bit applications.

edelwater
  • 2,650
  • 8
  • 39
  • 67
0

Add reference of service in your service or copy dll.

JDP
  • 21
  • 1
    Good answers expand on their points to a reasonable extent - maybe you could add in some extra information? For example, *how* do you do this? *Why* should you do this? – Swadq Dec 11 '12 at 22:49
  • @Swadq Good answers actually answer the question which this does not; adding a web reference is different from creating a service which is what this question is. You add the reference to the service after the service is created and accessible. – Richard Barker Sep 11 '15 at 17:40
0
  1. Make sure markup (svc) file has service attribute with namespace.classname and codebehind will be classname.svc.cs

  2. Rebuild the solution

  3. Restart the app pools from local IIS once.

Nitin
  • 29
  • 5
0

Building the solution before adding the service reference solved my problem.

Ratan
  • 863
  • 5
  • 12
  • 28