Could not find default endpoint element
Asked Answered
S

35

389

I've added a proxy to a webservice to a VS2008/.NET 3.5 solution. When constructing the client .NET throws this error:

Could not find default endpoint element that references contract 'IMySOAPWebService' in the ServiceModel client configuration section. This might be because no configuaration file was found for your application or because no endpoint element matching this contract could be found in the client element.

Searching for this error tells me to use the full namespace in the contract. Here's my app.config with full namespace:

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" bindingConfiguration="IMySOAPWebServicebinding"
            contract="Fusion.DataExchange.Workflows.IMySOAPWebService" name="IMySOAPWebServicePort" />
</client>

I'm running XP local (I mention this because a number of Google hits mention win2k3) The app.config is copied to app.exe.config, so that is also not the problem.

Any clues?

Spiraea answered 9/12, 2008 at 13:6 Comment(3)
If this is running on a web server then you need to add .svc. Example: "192.168.100.87:7001/soap/IMySOAPWebService.svcWeymouth
The service is an not a .NET service, it is not running on a webserver.Spiraea
I solved this problem in projects developed in .NET, But I have some projects in VB6 and I have the same problem. Any Ideas?Compaction
S
83

Having tested several options, I finally solved this by using

contract="IMySOAPWebService"

i.e. without the full namespace in the config. For some reason the full name didn't resolve properly

Spiraea answered 10/12, 2008 at 13:19 Comment(2)
It seems, that contract name has to be written exactly in the same way as the client. In my case, I had var proxy = new ExternalServices.ServiceClient("MyServiceEndpoint"); It worked when the I added the namespace to contract: contract="ExternalServices.IMyService"Afrikaans
This didnt work for me. My problem might be a little bit different . I get this error time to time not always. What might be the issue. Could error mighht be at service side?_ThanksGaziantep
S
624

"This error can arise if you are calling the service in a class library and calling the class library from another project."

In this case you will need to include the WS configuration settings into the main projects app.config if its a winapp or web.config if its a web app. This is the way to go even with PRISM and WPF/Silverlight.

Select answered 29/4, 2010 at 13:18 Comment(9)
This wasn't the cause for my specific problem, but I'm sure this will help others. ThanksSpiraea
Is there any way to automatically merge the two? What if the class library updates its configuration? Are you just stuck remembering to update the copied config info in all projects that are referencing it? This fix seems to rely too much on the developer's vigilance...Before
I'm getting the same error for a WP7 app (Silverlight I believe) and it took me far too long to notice that ServiceReferences.ClientConfig is generated in the project directory. Copying the <bindings> and <client> elements from the file in my library to my main app (which were previously empty) got things working.Heng
OK, I did this too, and it worked, but I sure as heck would like to understand WHY it worked! It doesn't make sense to me that it would.Affective
For Silverlight 4 I include the .ClientConfig file (from my library) to the main project as a link. This makes editing the settings of the file easier (vs. multiple copies in different projects).Brazee
What if the project that's calling it is a MSTest project? i.e. no app.config or web.configRutharuthann
The reason this happens (as I understand it) is that config values are read from the main project in a solution, be that web, winforms, wpf etc. Say for example you have a class library project to access a database, the connectionString entry will need to be in the main project config rather than the class library config.Belvia
So we can conclude that, if we use WCF in a library, it would be better to code settings directly like the link #7689298 shown.Ours
I have even tried to add reference to Service from new project but I get same errorInterrogator
S
102

I solved this (I think as others may have suggested) by creating the binding and endpoint address instances myself - because I did not want to add new settings to the config files (this is a replacement for some existing library code which is used widely, and previously used an older Web Service Reference etc.), and so I wanted to be able to drop this in without having add new config settings everywhere.

var remoteAddress = new System.ServiceModel.EndpointAddress(_webServiceUrl);

using (var productService = new ProductClient(new System.ServiceModel.BasicHttpBinding(), remoteAddress))
{
    //set timeout
    productService.Endpoint.Binding.SendTimeout = new TimeSpan(0,0,0,_webServiceTimeout);

    //call web service method
    productResponse = productService.GetProducts();
} 

Edit

If you are using https then you need to use BasicHttpsBinding rather than BasicHttpBinding.

Sokul answered 16/6, 2011 at 8:57 Comment(7)
This is a helpful answer. On a web service I am using, the custom endpoint had to be bound in the object's initial declaration. It wouldn't work if I tried to do it later.Continuo
As much as I suspect that the top answer might have done the trick too, your solution worked, and it seems preferable to me hacking together my own config files.Spleeny
Works a charm! I much prefer being able to set the Endpoint in code rather than distributing an "app.config" file with my app.Bierman
If it's an Https web service remember to change BasicHttpBinding() to BasicHttpsBinding()Campeche
This solution is best for applications like EXCEL-DNA which does not have app.config or web.config.Hordein
with this solution I can deploy only the .exe without the .exe.config!Prehistoric
Good answer I wanted to create a proxy API using a Web API 2 solution but not have to put anything in the Web.Config this answer allowed me to keep the communcation close to the actual service method. Good work!Membranous
S
83

Having tested several options, I finally solved this by using

contract="IMySOAPWebService"

i.e. without the full namespace in the config. For some reason the full name didn't resolve properly

Spiraea answered 10/12, 2008 at 13:19 Comment(2)
It seems, that contract name has to be written exactly in the same way as the client. In my case, I had var proxy = new ExternalServices.ServiceClient("MyServiceEndpoint"); It worked when the I added the namespace to contract: contract="ExternalServices.IMyService"Afrikaans
This didnt work for me. My problem might be a little bit different . I get this error time to time not always. What might be the issue. Could error mighht be at service side?_ThanksGaziantep
Y
61

I've had this same issue. It turns out that for a web REFERENCE, you have to supply the URL as the first parameter to the constructor:

new WebService.WebServiceSoapClient("http://myservice.com/moo.aspx");

For a new style web SERVICE REFERENCE, you have to supply a name that refers to an endpoint entry in the configuration:

new WebService.WebServiceSoapClient("WebServiceEndpoint");

With a corresponding entry in Web.config or App.config:

<client>
      <endpoint address="http://myservice.com/moo.aspx"
        binding="basicHttpBinding" 
        bindingConfiguration="WebService"
        contract="WebService.WebServiceSoap"
        name="WebServiceEndpoint" />
    </client>
  </system.serviceModel>

Pretty damn hard to remove the tunnel vision on "it worked in an older program"...

Yeung answered 10/6, 2010 at 17:44 Comment(3)
Ah ha! This fixed it for me, I was just using an empty constructor before, which kept failing: new WebService.WebServiceSoapClient(); //failBlinni
This solutin did work !!! but, i am really curious as to why the default end point was not loaded ? any ideas to what could be the reasons ?Provost
@Yeung sorry to bring up an old thread. Does one have any advantage over another - WebReference and ServiceReference? I think the former would be more convenient for me but ServiceReference is the cool new thing I guess...Jody
A
18

I had a situation like this, where i had

  • WCF Service Hosted somewhere
  • Main Project
  • Consumer Project of type 'class Library' which has Service reference to a WCF Service
  • Main project calls methods from consumer project

Now the Consumer project had all the related configuration setting in <system.serviceModel> Tag of my app.config, its was still throwing the same error as the above.

All i did is added the same tag <system.serviceModel> to my main project's app.config file, and finally we were good to go.

The Real problem, as far as in my case was, it was reading the wrong configuration file. Instead of consumer's app.config, it was referring main proj's config. it took me two hours to figure that out.

Analog answered 11/8, 2011 at 5:3 Comment(2)
Same. Search for <system.serviceModel> in your library, then copy it to your main application's app.config. Just another symptom of class library app.configs not being read at run time. I spend sooooo much time compensating for this oversight (imo). If I want the library to read it's config from it's app.config, let it. Otherwise, why have an app.config for class libraries in the first place??Farmergeneral
I do have a similar situation, and both my Consumer Project's App config's service model section and the main project's app config's service model are identical, but still i am getting this error. May be there's something else which is causing this at my end.Polyzoarium
L
18

"This error can arise if you are calling the service in a class library and calling the class library from another project."

"In this case you will need to include the WS configuration settings into the main projects app.config if its a winapp or web.config if its a web app. This is the way to go even with PRISM and WPF/Silverlight."

Yes, but if you can't change main project (Orchard CMS for example), you can keep WCF service config in your project.

You need to create a service helper with client generation method:

public static class ServiceClientHelper
{
    public static T GetClient<T>(string moduleName) where T : IClientChannel
    {
        var channelType = typeof(T);
        var contractType = channelType.GetInterfaces().First(i => i.Namespace == channelType.Namespace);
        var contractAttribute = contractType.GetCustomAttributes(typeof(ServiceContractAttribute), false).First() as ServiceContractAttribute;

        if (contractAttribute == null)
            throw new Exception("contractAttribute not configured");

        //path to your lib app.config (mark as "Copy Always" in properties)
        var configPath = HostingEnvironment.MapPath(String.Format("~/Modules/{0}/bin/{0}.dll.config", moduleName)); 

        var configuration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = configPath }, ConfigurationUserLevel.None);
        var serviceModelSectionGroup = ServiceModelSectionGroup.GetSectionGroup(configuration);

        if (serviceModelSectionGroup == null)
            throw new Exception("serviceModelSectionGroup not configured");

        var endpoint = serviceModelSectionGroup.Client.Endpoints.OfType<ChannelEndpointElement>().First(e => e.Contract == contractAttribute.ConfigurationName);
        var channelFactory = new ConfigurationChannelFactory<T>(endpoint.Name, configuration, null);
        var client = channelFactory.CreateChannel();
        return client;
    }
}

and use it:

using (var client = ServiceClientHelper.GetClient<IDefaultNameServiceChannel>(yourLibName)) {
                ... get data from service ...
            }

See details in this article.

Liana answered 5/12, 2014 at 7:6 Comment(0)
B
16

This one drove me crazy.

I'm using Silverlight 3 Prism (CAB) with WCF

When I call a WCF service in a Prism module, I get the same error:

Could not find default endpoint element that references contract 'IMyService' in the service model client configuaration section. This might be because no configuaration file was found for your application or because no end point element matching this contract could be found in the client element

It turns out that its looking in the Shell's .xap file for a ServiceReferences.ClientConfig file, not in the module's ServiceReferences.ClientConfig file. I added my endpoint and binding to the existing ServiceReferences.ClientConfig file in my Silverlight Shell application (it calls it's own WCF services).

Then I had to rebuild the Shell app to generate the new .xap file for my Web project's ClientBin folder.

Now this line of code finally works:

MyServiceClient myService = new MyServiceClient();
Bracelet answered 15/10, 2009 at 18:57 Comment(0)
F
16

Several responses here hit upon the correct solution when you're facing the mind-numbingly obscure error of referencing the service from a class file: copy service config info into your app.config web.config of your console or windows app. None of those answers seem to show you what to copy though. Let's try and correct that.

Here's what I copied out of my class library's config file, into my console app's config file, in order to get around this crazy error for a service I write called "TranslationServiceOutbound".

You basically want everything inside the system.serviceModel section:

  <system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_ITranslationServiceOutbound" />
  </basicHttpBinding>
</bindings>
<client>
  <endpoint address="http://MyHostName/TranslationServiceOutbound/TranslationServiceOutbound.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ITranslationServiceOutbound"
    contract="TranslationService.ITranslationServiceOutbound" name="BasicHttpBinding_ITranslationServiceOutbound" />
</client>

Floodgate answered 5/7, 2017 at 20:11 Comment(0)
S
12

I was getting this error within an ASP.NET application where the WCF service had been added to a class library which is being added to the ASP.NET application as a referenced .dll file in the bin folder. To resolve the error, the config settings in the app.config file within the class library referencing the WCF service needed to be copied into the web.config settings for the ASP.NET site/app.

Superposition answered 29/8, 2014 at 10:27 Comment(1)
While other answers might've described the same problem. This answer described my exact situation and I finally understood the issue. Thank you for saving my daySlipnoose
M
11

Unit testing a non-library application that consumes a service can cause this problem.

The information that others have entered addresses the root cause of this. If you are trying to write automated test cases and the unit you are testing will actually invoke the service interface, you need to add the service reference to the test project. This is a flavor of the application using library type of error. I did not immediately realize this though because my code that consumes the interface is not in a library. However, when the test actually runs it will be running from the test assembly, not the assembly under test.

Adding a service reference to the unit test project resolved my issue.

Malinin answered 14/2, 2012 at 23:31 Comment(1)
YES this is the way!!Measles
A
10

I had the same problem, but changing the contract namespace didn't work for me. So I tried a .Net 2 style web reference instead of a .Net 3.5 service reference. That worked.

To use a Web reference in Visual Studio 2008, click on 'Add Service Reference', then click 'Advanced' when the dialog box appears. In that you will find an option that will let you use a Web reference instead of a Service reference.

Antagonism answered 7/4, 2009 at 11:47 Comment(3)
This is what I ended up doing as well. I wish the problem made sense to me.Accolade
This worked for me, also. Now I have all this extra junk in my solution (Settings.Settings, a new Web References folder) for no good reason. Will have to come back and re-visit this when I have more time.Daiseydaisi
Agreed. I had the same problem, and fixed it by changing it to a web reference.Exact
E
10

I found (as well as copying to the client UI's App.config as I was using a Class Library interface) I had to prefix the name of the binding with the name of the Service Reference (mine is ServiceReference in the below).

e.g.:

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ServiceReference.ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />

instead of the default generated:

<endpoint address="http://localhost:4000/ServiceName" binding="basicHttpBinding"
      bindingConfiguration="BasicHttpBinding_ISchedulerService"
      contract="ISchedulerService" 
      name="BasicHttpBinding_ISchedulerService" />
Erlindaerline answered 30/10, 2010 at 11:14 Comment(1)
I had to do the same thing. I really don't understand why.Skyros
N
8

I have a situation which in the Unit test. I copied the app.config file to the unit test project. So the unit test project also contains endpoint information.

Nicolenicolea answered 23/9, 2015 at 13:16 Comment(2)
I didn't copy the complete app.config, but the system.serviceModel section. That's all!Jerroldjerroll
Same, except I copied the system.serviceModel to the app.config of a console applicationConcise
H
5

I faced this problem once. It was because i was still developing the interface that uses WCF service. I configured test application and continued development. Then in development, i changed some of the services' namespaces. So i double checked "system.serviceModel -> client -> endpoint -> contract" in web.config to match WCF class. Then problem is solved.

Harmful answered 22/9, 2012 at 12:25 Comment(0)
R
4

The namespace in your config should reflect the rest of the namespace path after your client's default namespace (as configured in the project properties). Based on your posted answer, my guess is that your client is configured to be in the "Fusion.DataExchange.Workflows" namespace. If you moved the client code to another namespace you would need to update the config to match the remaining namespace path.

Retinoscope answered 10/12, 2008 at 15:54 Comment(0)
T
3

This error can arise if you are calling the service in a class library and calling the class library from another project.

Transduction answered 15/4, 2010 at 12:10 Comment(0)
T
3

I Have a same Problem.I'm Used the WCF Service in class library and calling the class library from windows Application project.but I'm Forget Change <system.serviceModel> In Config File of windows application Project same the <system.serviceModel> of Class Library's app.Config file.
solution: change Configuration of outer project same the class library's wcf configuration.

Thyroiditis answered 14/6, 2010 at 13:16 Comment(0)
L
3

Do not put service client declaration line as class field, instead of this, create instance at each method that used in. So problem will be fixed. If you create service client instance as class field, then design time error occurs !

Levator answered 11/7, 2011 at 14:16 Comment(0)
V
3

Hi I've encountered the same problem but the best solution is to let the .NET to configure your client side configuration. What I discover is this when I add a service reference with a query string of http:/namespace/service.svc?wsdl=wsdl0 it does NOT create a configuration endpoints at the client side. But when I remove the ?wsdl-wsdl0 and only use the url http:/namespace/service.svc, it create the endpoint configuration at the client configuration file. for short remoe the " ?WSDL=WSDL0" .

Vaudois answered 31/7, 2011 at 22:4 Comment(0)
D
3

In case if you are using WPF application using PRISM framework then configuration should exist in your start up project (i.e. in the project where your bootstrapper resides.)

Diversification answered 29/8, 2012 at 20:49 Comment(0)
L
2

There seem to be several ways to create/fix this issue. For me, the CRM product I am using was written in native code and is able to call my .NET dll, but I run into the configuration information needing to be at/above the main application. For me, the CRM application isn't .NET, so I ended up having to put it in my machine.config file (not where I want it). In addition, since my company uses Websense I had a hard time even adding the Service Reference due to a 407 Proxy Authentication Required issue, that to required a modification to the machine.cong.

Proxy solution:

To get the WCF Service Reference to work I had to copy the information from the app.config of my DLL to the main application config (but for me that was machine.config). And I also had to copy the endpoint information to that same file. Once I did that it starting working for me.

Laniferous answered 6/5, 2010 at 21:14 Comment(0)
F
2

Ok. My case was a little diffrent but finally i have found the fix for it: I have a Console.EXE -> DLL -> Invoking WS1 -> DLL -> Invoking WS2

I have had both the configurations of the service model of WS1, and WS2 in the Console.EXE.config as recommended. - didnt solve the issue.

But it still didn't work, until i have added the WebReference of WS2 to WS1 also and not only to the DLL that actually creating and invoking the proxy of WS2.

Flitter answered 8/7, 2010 at 9:37 Comment(0)
Y
2

If you reference the web service in your class library then you have to copy app.config to your windows application or console application

solution: change Configuration of outer project same the class library's wcf configuration.

Worked for me

Yseult answered 25/10, 2010 at 0:48 Comment(0)
A
2

I had the same Issue
I was using desktop app and using Global Weather Web service

I deleted the service reference and added the web reference and problem solved Thanks

Antonetteantoni answered 4/11, 2011 at 12:58 Comment(0)
B
2

Solution for me was to remove the endpoint name from the Endpoint Name attribute in client web.config this allowed the proxy to use

ChannelFactory<TService> _channelFactory = new ChannelFactory<TService>("");

only took all day to work out. Also the contract name was wrong once this fix was in place although it had been wrong when the initial error appear. Double then triple check for contract name strings people !! attrib: Ian

Bywaters answered 23/12, 2011 at 9:37 Comment(0)
C
2

Allow me to add one more thing to look for. (Tom Haigh's answer already alludes to it, but I want to be explicit)

My web.config file had the following defined:

<protocolMapping>
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

I was already using basicHttpsBinding for one reference, but then I added a new reference which required basicHttpBinding (no s). All I had to do was add that to my protocolMapping as follows:

<protocolMapping>
    <add binding="basicHttpBinding" scheme="http" />
    <add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>

As L.R. correctly points out, this needs to be defined in the right places. For me, that meant one in my Unit Test project's app.config as well as one in the main service project's web.config.

Cahan answered 13/5, 2014 at 20:6 Comment(0)
M
2

I had this error when I was referencing the Contract in the configuration file element without the global scope operator.

i.e.

<endpoint contract="global::MyNamepsace.IMyContract" .../>

works, but

<endpoint contract="MyNamepsace.IMyContract" .../>

gives the "Could not find default endpoint element that references contract" error.

The assembly containing MyNamepsace.IMyContract is in a different assembly to the main application, so this may explain the need to use the global scope resolution.

Martian answered 29/10, 2014 at 23:7 Comment(0)
T
2

When you are adding a service reference

enter image description here

beware of namespace you are typing in:

enter image description here

You should append it to the name of your interface:

<client>
  <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
            binding="basicHttpBinding" 
            contract="MyNamespace.IMySOAPWebService" />
</client>
Teetotaler answered 31/5, 2016 at 17:35 Comment(0)
L
2

I got same error and I have tried many things but didn't work, than I noticed that my "contract" was not same at all projects, I changed the contract as would be same for all projects inside solution and than it worked. This is project A

<client>
    <endpoint address="https://xxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference.IIntegrationService" name="basic" />
</client>

Project B :

<client>
    <endpoint address="xxxxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="ServiceReference1.IIntegrationService" name="basic" />
</client>

Finally I changed for both as :

<client>
    <endpoint address="https://xxxxxxxxxxx" binding="basicHttpBinding" bindingConfiguration="basic" contract="MyServiceReferrence.IIntegrationService" name="basic" />
</client>
Lorileelorilyn answered 21/9, 2016 at 9:58 Comment(0)
M
1

I had the same issue and it was solved only when the host application and the dll that used that endpoint had the same service reference name.

Maragretmarala answered 24/8, 2016 at 9:10 Comment(0)
R
1

In my case, I Add service in both start up project and projects that use service with the same name. It worked...

Rockyrococo answered 11/8, 2020 at 7:30 Comment(0)
G
0

In my case I had renamed app.config to [appname].exe.config manually. This ended up adding an extra .config suffix to the file name. Solution was to rename it to [appname].exe to eliminate the extra .config extension.

Gragg answered 6/3, 2020 at 16:41 Comment(0)
W
0

There was another way I found the right endpointConfigurationName.

Adding the endpointConfigurationName as below

EservicesNew.ServiceClient eservicenew = new EservicesNew.ServiceClient("BasicHttpsBinding_IService");

Find the endpointConfigurationName as below

After adding the Web Reference, open the configuration.svcinfo file from the generated reference file.

enter image description here

There is two endpoints found and I used the right endpoint bindingConfiguration value which is BasicHttpsBinding_IService

enter image description here

Watereddown answered 29/4, 2021 at 7:12 Comment(0)
L
0

In my case, exe.config file was missing in production environment.

Lucknow answered 2/1, 2023 at 15:9 Comment(0)
L
-1

In my case, I was referring to this service from a library project, not a startup Project. Once I copied <system.serviceModel> section to the configuration of the main startup project, The issue got resolved.

During running stage of any application, the configuration will be read from the startup/parent project instead of reading its own configurations mentioned in separate subprojects.

Liquefy answered 10/4, 2018 at 9:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.