6

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

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

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

myServiceClient = new MyServiceClient();

MyServiceClient 继承自哪里

System.ServiceModel.ClientBase

我该如何解决这个问题?

注意:我有一个单独的控制台应用程序,它只是创建相同的服务对象并对其进行调用,它可以正常工作。

4

4 回答 4

8

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

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);
于 2010-03-11T09:42:34.000 回答
4

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

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

于 2008-08-24T14:21:06.540 回答
1

我有一个类似的案例。我有一个调用 Web 服务的类库,然后我有一个调用类库的 .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) 然后在所有相关的 app.config(对于 .dll 和 .exe)中更改“contract”值,如下所示:

从:

<端点地址= http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestras/WcfService_TFBIC_RCT_BizTalk_Orchestraations.svc binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITwoWayAsync" contract="RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestration" name="WSHttpBinding_ITwoWaysyncA ">

到:

<端点地址 = http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestras/WcfService_TFBIC_RCT_BizTalk_Orchestras.svc binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITwoWayAsync" contract=" TFBIC.RCT.HIP.Components。 RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations" name="WSHttpBinding_ITwoWayAsync">

澄清一下——我怎么知道完整的命名空间是什么?该程序的名称空间是 TFBIC.RCT.HIP。在其中,C# 代码有一个额外的命名空间语句:

namespace RCTHipComponents
于 2009-11-10T22:03:10.083 回答
0

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

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

于 2008-08-24T12:29:30.863 回答