2015-06-07 29 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运行时将会我不公开此操作。