“无法找到名称为…的端点元素”

很抱歉这个问题很长…我花了两天时间调试并且有很多笔记……

我有一个WCF数据服务和另一个尝试通过TCP和/或HTTP作为客户端连接到它的进程。

我有一个非常简单的测试客户端应用程序似乎连接正常,但更复杂的生产应用程序无法连接(TCP或HTTP)。 在两个客户端项目中,我让Visual Studio 2008使用“添加服务引用”生成app.config,并让它从数据服务中提取元数据。

以下是适用于简单测试客户端的代码:

using Client.MyDataService; namespace Client { class Program { static void Main(string[] args) { MyDataServiceClient client = new MyDataServiceClient("net.tcp"); client.GetRecords(); } } } 

以下是更复杂的生产客户端的代码:

DataServiceManager.cs:

 using MyServer.MyDataService; namespace MyServer.DataServiceBridge { class DataServiceManager { MyDataServiceClient dataServiceClient = new MyDataServiceClient("net.tcp"); } } 

在主要过程中:

 DataServiceManager d = new DataServiceManager(); 

这是简单客户端和生产客户端的app.config文件:

                         
  • 在MyServer的bin \ Debug \文件夹中是MyServer.exe,app.config。

  • 在MyDataSeriviceHost的bin \ Debug \文件夹中是MyDataService.exe,app.config和MyDataSeriviceHost.exe.config。 app.config和MyDataSeriviceHost.exe.config是完全相同的。

这是错误消息:

 An exception of type 'System.InvalidOperationException' occurred in System.ServiceModel.dll but was not handled in user code Additional information: Could not find endpoint element with name 'net.tcp' and contract 'MyDataService.IMyDataService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this name could be found in the client element. 

有什么想法发生了什么? 谷歌已经筋疲力尽了。 🙁

解决了

事实certificate我们有一个加载DLL的exe。 DLL包含WCF客户端。 编译时,会生成MyServer.dll.config,但由于exe是本机的(不是.NET),因此它不会自动读入.config文件。 我们需要手动完成。 这个链接允许我手动加载配置并创建一个CustomChannelFactory <>来解决这个问题。

对于需要相同事物的其他人,这里是导致解决方案的链接: http : //www.paraesthesia.com/archive/2008/11/26/reading-wcf-configuration-from-a-custom-location。 ASPX

我有这种情况,我有

  • WCF服务托管在某个地方
  • 主要项目
  • “类库”类型的消费者项目,它具有对WCF服务的服务引用
  • 主项目从消费者项目调用方法

现在Consumer项目在我的app.config的标签中进行了所有相关配置设置,它仍然抛出与上面相同的错误。

我所做的就是将相同的标签到我的主项目的app.config文件中,最后我们很高兴。

真正的问题,就我的情况而言,它正在读取错误的配置文件。 而不是消费者的app.config,它是指主要的proj的配置。 我花了两个小时来弄清楚这一点。

可能只是你编写的方式,但听起来你的配置文件没有被正确地复制到目录。 它应该与您的应用程序具有匹配的名称而不是app.config。 如果您尝试将app.config文件的名称更改为[您的exe名称] .exe.config可以帮助您。

当EXE使用DLL时,它查找的配置文件不是DLLName.Dll.Config其EXEName.exe.config,更改生成的配置文件的名称并将其复制到执行路径。 它应该工作。

干杯!!!!!!!!!

在这些特定情况下可能使用的具有不同解决方案的类似情况:

  • 像上面的post一样,我在DLL中定义了一个EXE托管客户端。

  • 与上述情况不同的是,我的客户端正在使用UDP探测来发现服务端点(显然服务已启用MEX)

ClientProxyinheritanceDuplexClientBase ,而重载的实例化方法允许您指定绑定和端点,而无需任何配置文件。

一个VB的例子,我发现了一个端点(ep),我知道绑定是TCP,安全性被禁用,所以我可以实例化并使用回调客户端:

 myClientProxy = New ClientProxy(New InstanceContext(Me), New NetTcpBinding(SecurityMode.None), ep.Address)