2015-06-07 31 views
1

我已經構建了一個小WCF服務,我正在嘗試爲其構建單元測試。我已經在本地部署了一個數據庫,並且該服務可以工作,並且可以保存和讀取數據庫中的數據。我在同一個解決方案中創建了一個獨立的項目,作爲控制檯應用程序,並帶有服務引用來使用此服務WCF服務控制檯客戶端異常

下面是代碼的樣子:

服務合同

[ServiceContract] 
    public interface IUserService 
    { 
     //When testing in the browser use verb GET 
     [OperationContract] 
     [WebInvoke(Method="POST", UriTemplate = "/CreateNewUserAccount?userNameValue={userName})] 
     void CreateNewUserAccount(string userName); 
    } 

服務實現:

public void CreateNewUserAccount(string userName) 
    { 
     var userContorller = new UserController(); 
     userContorller.addNewUser(userName); 
    } 

控制檯客戶端與服務參考:

 static void Main(string[] args) 
     { 
      try 
      { 
       UserServiceClient serviceClient = new UserServiceClient(""); 
      } 
      catch(Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 

      Console.ReadKey(); 
     } 

下面是我如何在瀏覽器中調用該服務的示例: http://localhost:8654/Services/UserService/UserService.svc/CreateNewUserAccount?userNameValue=testUser

我已經確認,這在我本地運行服務時起作用。現在我從控制檯客戶端接收的例外是:

無法與在ServiceModel客戶端配置節名「」和合同「SerficeReference.IUserService」找到終結點元素。

看起來我缺少端點,並且在鏈接服務引用時app.config中沒有生成任何內容。我已經嘗試了app.config中的許多配置,但我似乎無法得到這個直線。當我嘗試在控制檯應用程序中實例化服務客戶端時發生異常。我的app.config看起來像這樣:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 
</configuration> 

任何幫助,將不勝感激。

+0

您正在嘗試做什麼(將服務引用添加到WCF Web HTTP端點)不起作用! http://blogs.msdn.com/b/carlosfigueira/archive/2012/03/26/mixing-add-service-reference-and-wcf-web-http-aka-rest-endpoint-does-not-work。 aspx –

回答

-1

btw,您的CreateUserAccount缺少OperationContract屬性。 請添加並再次嘗試服務引用。

在COnsole項目中添加服務引用時,.NET會將命名的端點添加到您的app.config中。 (默認的)

我沒有在你的app.config中看到。確保您正確添加了參考。

之後,你需要做的,

UserServiceClient serviceClient = new UserServiceClient(); // default endpoint 

OR

UserServiceClient serviceClient = new UserServiceClient(namedEndpoint); // from app.config 

從你的代碼,你就明確要求WCF來實例化一個客戶端代理,在App.Config中的端點命名爲空白串。 (「「) 這就是問題。

如果由於某種原因,你的App.config沒有端點和綁定的詳細信息,你可以做到這一點編程,以及:

// programmatic binding and address 

var binding = new BasicHttpBinding(); 
var endpointAddress = new EndpointAddress("localhost_service_address"); 

var serviceClient = new UserServiceClient(binding, endpointAddress); 
+0

問題在於.NET不會自動添加指定的端點。我不得不跳過循環來配置它。添加服務引用後,AppConfig保持空白,我嘗試了很多東西,但沒有任何東西會生成appConfig文件。即使svcutil.exe也不會生成它只是.cs文件。 – zic10

+0

多數民衆贊成在奇怪的。當您添加服務引用時,.NET應該將端點/綁定部分添加到您的app.config。另一種方式(非配置方式)要做的是明確地在代碼中創建端點和綁定並調用代理。用這個編輯答案。 –

+0

我使用「http:// localhost:8983/Services/UserService/UserService.svc?wsdl」作爲我的命名端點,但是會引發不同的異常。我正在使用VS2015RC Express,不確定這是否也是這個問題的一個因素。例外是,「在配置部分中找不到元素端點和合同」。但是,該網址將在瀏覽器中找到並且服務可以訪問。 – zic10

0

,沒有客戶端的端點配置在配置產生的原因文件是從R​​ESTful WCF服務is not supported生成客戶端代碼。

非SOAP HTTP服務沒有元數據標準。作爲服務的調用者,您只需直接調用它。

可以消耗.NET REST風格的端點在許多方面,包括:

  1. 使用WebChannelFactory
  2. 使用好老HttpClient
  3. 使用WebClient

在所有這些您需要將[OperationContract]屬性添加到您的服務操作合同定義中,否則WCF運行時將會我不公開此操作。