创建wcf Web服务实例时出现InvalidOperationException

时间:2008-08-24 12:11:01

标签: .net wcf web-services

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

  

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

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

myServiceClient = new MyServiceClient();

MyServiceClient继承自

System.ServiceModel.ClientBase

我该如何解决这个问题?

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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:4)

  

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

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

答案 2 :(得分:1)

我遇到了类似的情况。我有一个叫做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)然后还更改所有相关app.config中的“合同”值(对于.dll和.exe),如下所示:

来自:

<端点地址= http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svc binding =“wsHttpBinding”bindingConfiguration =“WSHttpBinding_ITwoWayAsync”                 合同= “RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations”                 NAME = “WSHttpBinding_ITwoWayAsync” >

致:

<端点地址= http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.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

答案 3 :(得分:0)

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

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