75
votes

I have a .NET Core xUnit project. I'm trying to call a WCF service from it but get the following exception:

System.InvalidOperationException occurred
  HResult=0x80131509
  Message=An error occurred while loading attribute 'ServiceContractAttribute' on type 'IMyContract'.  Please see InnerException for more details.

Inner Exception 1:
FileNotFoundException: Could not load file or assembly 'System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. The system cannot find the file specified.

It works with a Framework 4.7 project with the same Nuget Package System.ServiceModel.Http.4.3.0.

4
@silkfire I feared that. Has that been documented anywhere? It's crazy that I can install the same package in different frameworks and get a different set of functionality.BanksySan
@silkfire if that is the answer than feel free to put it down.BanksySan
See Microsoft's .NET API Reference website for info on what's supported in .NET Core and what's .NET Framework onlyjspinella
@BanksySan Apparently it seems I was correct pertaining to the fact that it has been removed from the main framework itself; with that in mind, it was deeply unfortunate that I stated that there was no solution to this, when in fact Microsoft had made the relevant assemblies available on NuGet as optional packages instead. Feel free to change my accepted answer to the one with the most upvotes below.silkfire
or just run this in terminal window (dotnet add package System.ServiceModel.Primitives)Wesam

4 Answers

101
votes

Microsoft has made available the relevant assemblies as packages on NuGet now.

System.ServiceModel.Primitives is the base package; add the others if necessary to your project.

enter image description here

85
votes

If you are using .NET Standard 2.0 (that's what I tested with), you can install compatible NuGet packages.

The basic service model is available in System.ServiceModel.Primitives (currently v4.4.0).

If required, install System.ServiceModel.Http as well.

15
votes

The Microsoft WCF Web Service Reference Provider wraps SvcUtil.exe and will generate a .NET Standard project from your endpoint. Look in the project file and you'll see the ServiceModel references that will work for you.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.4</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="System.ServiceModel.Duplex" Version="4.3.0" />
    <PackageReference Include="System.ServiceModel.Http" Version="4.3.0" />
    <PackageReference Include="System.ServiceModel.NetTcp" Version="4.3.0" />
    <PackageReference Include="System.ServiceModel.Security" Version="4.3.0" />
    <PackageReference Include="System.Xml.XmlSerializer" Version="4.3.0" />
  </ItemGroup>
</Project>

When I needed to do this I was able to use the generated class library in my .NET Core project.

-1
votes

I had same issue, i had to add .asmx web service into my class library asp.net core project, i tried to add reference directly by add connected service option but i wan unable to see any config file and lots of references errors also, below are the steps by which i solve my problem.

1-Create library project name Service Mapping 2-Create folder Web References and then create inside folder ClientHotel 3-Open terminal in visual studio from view ---> terminal --- command prompt. 4-Integrate asmx service by command svcutil http://abctest.asmx (.asmx URL) inside inside ClientHotel folder.

5-it will create .cs class and output.config file with references in it. 6-Now i had errors of references like the type or namespace servicecontractattribute does not exist in namespace System.ServiceModel etc.

7-Install Package System.ServiceModel.Primitives Then all references errors will be gone.

That is how i was able to add .asmx service to my class library project.