【问题标题】:WCF Service Console Client ExceptionWCF 服务控制台客户端异常
【发布时间】:2015-06-07 05:09:31
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

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


【解决方案1】:

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

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

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

  1. 使用WebChannelFactory
  2. 使用好旧的HttpClient
  3. 使用WebClient

在所有这些情况下,您都需要将[OperationContract] 属性添加到您的服务操作合同定义中,否则 WCF 运行时将不会公开此操作。

【讨论】:

    【解决方案2】:

    顺便说一句,您的 CreateUserAccount 缺少 OperationContract 属性。 请添加它并再次尝试服务引用。

    当您在 COnsole 项目中添加服务引用时,.NET 会将命名端点添加到您的 app.config。 (默认)

    我在您的 app.config 中没有看到。确保您正确添加了引用。

    之后你需要做的,

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

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

    【讨论】:

    • 问题是 .NET 没有自动添加命名端点。我不得不跳过循环来配置它。添加服务引用后,AppConfig 仍然为空,我尝试了很多东西,但没有任何东西会生成 appConfig 文件。甚至 svcutil.exe 也不会只生成 .cs 文件。
    • 这很奇怪。当您添加服务引用时,.NET 应该将端点/绑定部分添加到您的 app.config。另一种方式(非配置方式)是在代码中显式创建端点和绑定并调用代理。用这个编辑了答案。
    • 我使用“localhost:8983/Services/UserService/UserService.svc?wsdl”作为我的命名端点,但这会引发不同的异常。我正在使用 VS2015RC Express,不确定这是否也是导致此问题的一个因素。例外是“在配置部分找不到元素端点和合同”。但是,该 url 可以在浏览器中找到并且服务是可访问的。
    • 不应是端点名称。你能不能试试程序化的方式。
    • 以编程方式使用服务?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多