找不到默认的端点元素

我已经添加了一个Web服务的代理到VS2008 / .NET 3.5解决scheme。 当构build客户端.NET时会引发这个错误:

找不到在服务模型客户端configuration部分中引用合同“IMySOAPWebService”的默认端点元素。 这可能是因为没有为您的应用程序findconfiguration文件,或者因为在客户端元素中找不到匹配此合同的终点元素

search这个错误告诉我使用合同中的完整命名空间。 这是我的app.config完整的命名空间:

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

我正在运行XP本地(我提到这是因为一些谷歌命中提到win2k3)app.config被复制到app.exe.config,所以这也不是问题。

任何线索?

“如果您正在调用类库中的服务并从另一个项目调用类库,则会出现此错误。”

在这种情况下,您需要将WSconfiguration设置包含在主要项目app.config中,如果它是winapp或web.config(如果是web应用程序)。 即使使用PRISM和WPF / Silverlight也是如此。

经过testing了几个选项,我终于通过使用解决了这个问题

合同= “IMySOAPWebService”

即在configuration中没有完整的命名空间。 由于某种原因,全名没有正确解决

我已经通过自己创build绑定和端点地址实例解决了这个问题(我认为正如其他人可能已经提出的那样),因为我不想将新的设置添加到configuration文件中(这是replace一些现有的库代码,使用广泛,以前使用旧的Web服务参考等),所以我想能够在不添加任何新的configuration设置的情况下放弃。

 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(); } 

编辑

如果您使用的是https,那么您需要使用BasicHttpsBinding而不是BasicHttpBinding

我有这个相同的问题。 事实certificate,对于Web REFERENCE,您必须提供URL作为构造函数的第一个参数:

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

对于新样式的Web SERVICE REFERENCE,您必须提供一个引用configuration中端点条目的名称:

 new WebService.WebServiceSoapClient("WebServiceEndpoint"); 

Web.configApp.config有相应的条目:

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

很难去除“在一个较旧的程序中工作”的隧道视野…

我有这样的情况,我有

  • WCF服务托pipe在某处
  • 主项目
  • 消费者项目types'类库'具有服务引用到WCF服务
  • 主项目调用消费者项目的方法

现在Consumer项目已经在我的app.config的<system.serviceModel> Tag中有了所有相关的configuration设置,它仍然抛出与上面相同的错误。

我所做的只是将相同的标记<system.serviceModel>到我的主项目的app.config文件中,最后我们很好。

真正的问题,就我而言,就是读错了configuration文件。 而不是消费者的app.config,它是指主proj的configuration。 我花了两个小时才弄清楚。

这个让我疯狂。

我用WCF使用Silverlight 3 Prism(CAB)

当我在Prism模块中调用WCF服务时,出现同样的错误:

找不到在服务模型客户端configuration部分中引用合同“IMyService”的默认端点元素。 这可能是因为没有为您的应用程序findconfiguration文件,或者因为在客户端元素中找不到匹配此合同的终点元素

事实certificate,它在Shell的.xap文件中查找ServiceReferences.ClientConfig文件,而不是在模块的ServiceReferences.ClientConfig文件中查找。 我添加了我的端点并绑定到Silverlight Shell应用程序中的现有ServiceReferences.ClientConfig文件(它将其称为它自己的WCF服务)。

然后我不得不重buildShell应用程序来为我的Web项目的ClientBin文件夹生成新的.xap文件。

现在这行代码终于起作用了:

 MyServiceClient myService = new MyServiceClient(); 

“如果您正在调用类库中的服务并从另一个项目调用类库,则会出现此错误。”

“在这种情况下,如果Webconfiguration是winapp或web.config,那么您需要将WSconfiguration设置包含到主项目app.config中,即使使用PRISM和WPF / Silverlight也是如此。

是的,但是如果你不能改变主项目(例如Orchard CMS),你可以在你的项目中保留WCF服务configuration。

您需要使用客户端生成方法创build服务助手:

 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; } } 

并使用它:

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

请参阅本文中的详细信息。

我在一个ASP.NET应用程序中得到了这个错误,在这个应用程序中,WCF服务被添加到一个类库中,该类库被作为一个被引用的bin文件夹中的.dll文件添加到ASP.NET应用程序中。 要解决此错误,需要将引用WCF服务的类库中的app.config文件中的configuration设置复制到ASP.NET网站/应用程序的web.config设置中。

我发现(以及复制到客户端用户界面的App.config,因为我正在使用一个类库接口),我不得不使用服务引用的名称(我的是ServiceReference在下面)的绑定名称。

例如:

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

而不是默认生成的:

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

我有同样的问题,但改变合同命名空间不适合我。 所以我尝试了.Net 2风格的Web引用而不是.Net 3.5服务引用。 这工作。

要在Visual Studio 2008中使用Web引用,请单击“添加服务引用”,然后在出现对话框时单击“高级”。 在这一点上,你会发现一个选项,可以让你使用Web引用,而不是服务引用。

unit testing消耗服务的非库应用程序可能会导致此问题。

其他人input的信息解决了这个问题的根源。 如果您正在尝试编写自动化testing用例,并且您正在testing的单元将实际调用服务接口,则需要将该服务引用添加到testing项目中。 这是使用库types的错误的应用程序的味道。 我没有立即意识到这一点,因为我的代码消耗接口不在库中 。 然而,当testing实际运行时,它将从testing组件运行,而不是被测组件。

添加服务引用到unit testing项目解决了我的问题。

我有一个在unit testing中的情况。 我将app.config文件复制到unit testing项目。 所以unit testing项目也包含端点信息。

我曾经遇到过这个问题。 这是因为我还在开发使用WCF服务的接口。 我configuration了testing应用程序并继续开发。 然后在开发中,我改变了一些服务的命名空间。 所以我再次检查web.config中的“system.serviceModel – >客户端 – >端点 – >契约”以匹配WCF类。 然后问题解决了。

当你面对从一个类文件引用服务的思维麻木的错误时,这里有几个反应正确的解决scheme:将服务configuration信息复制到你的控制台或Windows应用程序的app.config web.config中。 这些答案似乎都没有告诉你要拷贝什么。 让我们试着纠正这一点。

这是我从我的类库的configuration文件中复制到我的控制台应用程序的configuration文件,以绕过这个疯狂的错误,我写一个名为“TranslationServiceOutbound”的服务。

你基本上想要system.serviceModel部分内的一切:

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

您的configuration中的命名空间应该反映客户端的默认命名空间(如项目属性中所configuration的)之后的命名空间path的其余部分。 根据你发布的答案,我的猜测是你的客户端被configuration在“Fusion.DataExchange.Workflows”命名空间中。 如果您将客户端代码移动到另一个名称空间,则需要更新configuration以匹配剩余的名称空间path。

对于有同样问题的其他人, 我为我的方法写了一个unit testing,试图连接到我的服务。 它每次都有这样的例外 – 我不知道为什么。 当我从一个winform运行它,它工作正常。

如果您正在调用类库中的服务并从另一个项目调用类库,则会出现此错误。

我有一个相同的问题。我在类库中使用WCF服务,并从Windows应用程序项目调用类库。但我忘记更改<system.serviceModel>在Windows应用程序项目的configuration文件相同的<system.serviceModel>类库的app.Config文件。
解决scheme:更改外部项目的configuration与类库的wcfconfiguration相同。

如果在类库中引用Web服务,则必须将app.config复制到Windows应用程序或控制台应用程序

解决scheme:更改外部项目的configuration与类库的wcfconfiguration相同。

为我工作

嗨,我遇到了同样的问题,但最好的解决scheme是让.NETconfiguration您的客户端configuration。 我发现这是当我添加一个查询string为http:/namespace/service.svc?wsdl = wsdl0的服务引用时,它不会在客户端创buildconfiguration端点。 但是,当我删除?wsdl-wsdl0并仅使用url http:/namespace/service.svc时,它将在客户端configuration文件中创build端点configuration。 简称“WSDL = WSDL0”。

不要把服务客户端声明行作为类字段,而不是这样,在每个使用的方法上创build实例。所以问题将被修复。 如果您将服务客户端实例创build为类字段,则会发生devise时错误!

如果您正在使用PRISM框架使用WPF应用程序,那么configuration应该存在于您的启动项目中(即您的引导程序驻留的项目中)。

似乎有几种方法来创build/修复这个问题。 对我来说,我使用的CRM产品是用本地代码编写的,能够调用我的.NET DLL,但是我碰到了需要在主应用程序上面的configuration信息。 对于我来说,CRM应用程序不是.NET,所以我不得不把它放在我的machine.config文件(不是我想要的地方)。 另外,由于我的公司使用Websense,由于需要407代理validation问题,所以我甚至添加了服务引用也很困难,因此需要修改machine.cong。

代理解决scheme

为了让WCF服务引用起作用,我必须将我的DLL的app.config中的信息复制到主应用程序configuration中(但是对于我来说就是machine.config)。 而且我还必须将端点信息复制到同一个文件。 一旦我做到了,就开始为我工作。

好。 我的情况有点不同,但最后我发现了它的修复:我有一个Console.EXE – > DLL – >调用WS1 – > DLL – >调用WS2

我build议使用Console.EXE.config中的WS1和WS2服务模型的configuration。 – 没有解决这个问题。

但是,直到我将WS2WebReference也添加到WS1中 ,而不仅仅是实际创build和调用WS2的代理的DLL,它仍然不起作用。

我遇到过同样的问题
我正在使用桌面应用程序,并使用全球天气Web服务

我删除了服务引用,并添加了Web引用和问题解决谢谢

我的解决scheme是从客户端web.config中的端点名称属性中删除端点名称,这允许代理使用

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

只花了一整天的时间去锻炼。 此外,合同名称是错误的,一旦这个修复程序就位,虽然最初的错误出现时是错误的。 双然后三重检查合同名字串的人! attrib:伊恩

请允许我再添加一件东西来寻找。 ( 汤姆·海格的答案已经暗示,但我想要明确)

我的web.config文件有以下定义:

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

我已经使用basicHttpsBinding作为一个引用,但是我添加了一个新的引用,它需要basicHttpBinding(no s)。 我所要做的只是添加到我的protocolMapping如下:

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

正如LR正确指出的那样,这需要在正确的地方进行定义。 对我来说,这意味着在我的unit testing项目的app.config中,以及在主服务项目的web.config中。

我在没有全局作用域操作符的情况下在configuration文件元素中引用合约时出现此错误。

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

作品,但是

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

给出“无法find引用合同的默认端点元素”错误。

包含MyNamepsace.IMyContract的程序集与主应用程序位于不同的程序集中,因此可能需要使用全局作用域parsing。

我得到同样的错误,我尝试了很多东西,但没有工作,比我注意到,我的“合同”是不一样的整个项目,我改变了合同,因为将解决scheme中的所有项目和它的工作相同。 这是项目A

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

项目B:

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

最后我改变了为:

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

当你添加一个服务引用

在这里输入图像描述

当心你input的命名空间:

在这里输入图像描述

您应该将其附加到您的界面的名称:

 <client> <endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService" binding="basicHttpBinding" contract="MyNamespace.IMySOAPWebService" /> </client>