2008-08-24 80 views
6

我有一个从类库中引用的WCF Web服务。项目运行后,创建从一个类库里面的服务客户对象的时候,我收到一个InvalidOperationException与消息:创建wcf Web服务实例时出现InvalidOperationException

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

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

myServiceClient = new MyServiceClient(); 

其中MyServiceClient从

继承System.ServiceModel.ClientBase

如何解决这个问题?

注:我有一个单独的控制台应用程序,它只是创建相同的服务对象,并打电话给它,它没有任何问题。

回答

5

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

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

+3

哪里是你的app.config? – iamserious 2011-08-15 10:11:10

0

如果你发布你的app.config文件,这可能会有所帮助,因为这种错误往往指向<endpoint>块中的问题。确保合约属性看起来合适。

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

1

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

但正如理查德上面所说,我不得不完全限定命名空间。这有点痛苦。 以下正是我所改变的。令人痛苦的是,我必须在两个地方对其进行更改, 一个在您创建服务引用时生成的reference.cs中,另一个在配置文件中。因此,每次我更改Web服务并执行“更新参考”时,我必须再次对C#代码进行更改。

1)您必须真正改变ConfigurationName在reference.cs如下:

来源:[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 绑定= “的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 绑定= “的wsHttpBinding” bindingConfiguration = “WSHttpBinding_ITwoWayAsync” 合同= “TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations” NAME = “WSHttpBinding_ITwoWayAsync” >

只是要清楚 - 我怎么知道什么是完整的命名空间是? 程序的名字空间是TFBIC.RCT.HIP。里面的是,C#代码有一个额外的 命名空间声明:

namespace RCTHipComponents 
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);