WCF服务控制台客户端异常

时间:2015-06-07 05:09:32

标签: c# .net web-services wcf service

我已经构建了一个小型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

我确认在本地运行服务时这是有效的。现在,我从控制台客户端收到的例外是:

  

无法找到名称为''的端点元素和合同' SerficeReference.IUserService'在ServiceModel客户端配置部分。

当我链接服务引用时,看起来我缺少端点并且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>

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

在配置文件中未生成客户端端点配置的原因是从RESTful WCF服务is not supported生成客户端代码。

非SOAP HTTP服务没有元数据标准。作为服务的调用者,您只需直接调用它即可。

您可以通过多种方式使用.net中的RESTful端点,包括:

  1. 使用WebChannelFactory
  2. 使用旧的HttpClient
  3. 使用WebClient
  4. 在所有这些实例中,您需要将[OperationContract]属性添加到服务操作协定定义中,否则WCF运行时将不会公开此操作。

答案 1 :(得分:-1)

顺便说一句,您的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);