2008-08-24 33 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);