我有一个从类库引用的WCF Web服务。在项目运行之后,当从类库中创建服务客户端对象时,我收到带有消息的InvalidOperationException:

  

找不到引用合同的默认端点元素   ServiceModel客户端中的“MyServiceReference.IMyService”   配置部分。这可能是因为没有配置文件   找到您的应用程序,或者因为没有端点元素匹配   这个合同可以在客户元素中找到。

我用来创建实例的代码是:

myServiceClient = new MyServiceClient();

MyServiceClient继承自

System.ServiceModel.ClientBase

我该如何解决这个问题?

注意:我有一个单独的控制台应用程序,它只是创建相同的服务对象并调用它,它可以毫无问题地工作。

有帮助吗?

解决方案

  

这是我的类库的app.config文件:

您应该将此配置设置放到主应用程序的配置文件中。 .NET应用程序(调用您的类库)使用来自它自己的配置文件的数据,而不是来自库配置文件。

其他提示

或者您可以在代码中设置端点:

http://msdn.microsoft.com/en-us/library/ ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");

// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);

我遇到了类似的情况。我有一个叫做Web服务的类库,然后我有一个调用class-lib的.DLL的.EXE。我认为这是.EXE的配置文件,而不是.DLL配置文件。

但正如理查德上面所说,我必须完全限定名称空间。这有点痛苦。 以下是我改变的内容。痛苦的是我必须在两个地方改变它, 在创建服务引用时生成的reference.cs中的一个,以及配置文件中的另一个。因此,每次我更改Web服务并执行<!>“更新引用<!>”时;我必须再次更改C#代码。

1)您必须实际更改reference.cs中的ConfigurationName,如下所示:

来自:[System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

收件人:[System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2)然后也改变<!>#8220;合同<!>#8221;所有相关app.config中的值(对于.dll <!>#8217; s和.exe <!>#8217; s)如下:

来自:

<!> lt;端点地址= http ://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc 结合= QUOT <!>; <!>的wsHttpBinding QUOT; bindingConfiguration = QUOT <!>; <!> WSHttpBinding_ITwoWayAsync QUOT;                 合同= QUOT <!>; <!> RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations QUOT;                 命名= QUOT <!>; WSHttpBinding_ITwoWayAsync QUOT <!>; GT <!>;

致:

<!> lt;端点地址= http ://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc 结合= QUOT <!>; <!>的wsHttpBinding QUOT; bindingConfiguration = QUOT <!>; <!> WSHttpBinding_ITwoWayAsync QUOT; <!>合同= QUOT; <!> TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations QUOT;命名= QUOT <!>; WSHttpBinding_ITwoWayAsync QUOT <!>; GT <!>;

只是要清楚 - 我怎么知道完整命名空间是什么? 该程序的命名空间是TFBIC.RCT.HIP。在其中,C#代码还有一个 命名空间声明:

namespace RCTHipComponents

如果您发布了app.config文件,这可能会有所帮助,因为这种错误往往会指向<endpoint>块中的问题。确保合同属性对您来说正确。

编辑:尝试完全限定合同价值;使用完整的命名空间。我认为这是必要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top