我有一个从类库引用的WCF Web服务。在项目运行之后,当从类库中创建服务客户端对象时,我收到带有消息的InvalidOperationException:
找不到引用合同的默认端点元素 ServiceModel客户端中的“MyServiceReference.IMyService” 配置部分。这可能是因为没有配置文件 找到您的应用程序,或者因为没有端点元素匹配 这个合同可以在客户元素中找到。
我用来创建实例的代码是:
myServiceClient = new MyServiceClient();
MyServiceClient继承自
System.ServiceModel.ClientBase
我该如何解决这个问题?
注意:我有一个单独的控制台应用程序,它只是创建相同的服务对象并调用它,它可以毫无问题地工作。
答案 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>
块中出现问题。确保合同属性对您来说正确。
编辑:尝试完全限定合同价值;使用完整的命名空间。我认为这是必要的。