gpt4 book ai didi

WCF 自托管服务 - C# 中的端点

转载 作者:行者123 更新时间:2023-12-04 10:31:51 25 4
gpt4 key购买 nike

我最初尝试创建自托管服务。试图做出一些接受查询字符串并返回一些文本但有一些问题的东西:

  • 如果在配置文件中找不到端点,所有文档都讨论了为每个基地址自动创建的端点。对我来说似乎并非如此,我收到“服务具有零应用程序端点...”异常。如下手动指定基本端点似乎可以解决此问题:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.ServiceModel;
    using System.ServiceModel.Description;

    namespace TestService
    {
    [ServiceContract]
    public interface IHelloWorldService
    {
    [OperationContract]
    string SayHello(string name);
    }

    public class HelloWorldService : IHelloWorldService
    {
    public string SayHello(string name)
    {
    return string.Format("Hello, {0}", name);
    }
    }

    class Program
    {
    static void Main(string[] args)
    {
    string baseaddr = "http://localhost:8080/HelloWorldService/";
    Uri baseAddress = new Uri(baseaddr);

    // Create the ServiceHost.
    using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
    {
    // Enable metadata publishing.
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
    smb.HttpGetEnabled = true;
    smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
    host.Description.Behaviors.Add(smb);

    host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr);
    host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr + "SayHello");

    //for some reason a default endpoint does not get created here
    host.Open();

    Console.WriteLine("The service is ready at {0}", baseAddress);
    Console.WriteLine("Press <Enter> to stop the service.");
    Console.ReadLine();

    // Close the ServiceHost.
    host.Close();
    }
    }
    }
    }
  • 当如此请求时,我将如何设置它以返回 SayHello(string name) 中的 name 值:localhost:8080/HelloWorldService/SayHello?name=kyle

  • 我想先走路再运行,但这看起来就像爬行......

    最佳答案

    关于未添加默认端点的问题:

  • 首先,这是 WCF 4 的一项功能 - 它仅适用于 .NET 4
  • 接下来,如果您没有在配置中定义明确的端点,并且如果您 ,默认端点只会添加到您的服务主机。不要在代码中自己添加端点 !通过在代码中添加这两个端点,您负责并且 WCF 4 运行时不会摆弄您的配置

  • 查看此 MSDN 库文章,了解有关 What's new in WCF 4 for developers 的更多信息.它展示了如何使用默认端点——你基本上为你的服务定义一个基地址并打开 ServiceHost——就是这样!
    string baseaddr = "http://localhost:8080/HelloWorldService/";
    Uri baseAddress = new Uri(baseaddr);

    // Create the ServiceHost.
    using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
    {
    //for some reason a default endpoint does not get created here
    host.Open();

    // here, you should now have one endpoint for each contract and binding
    }

    如果您愿意,您还可以在代码中显式添加默认端点。因此,如果您需要添加自己的端点,但又想添加系统默认端点,则可以使用:
    // define and add your own endpoints here

    // Create the ServiceHost.
    using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
    {
    // add all the system default endpoints to your host
    host.AddDefaultEndpoints();

    //for some reason a default endpoint does not get created here
    host.Open();

    // here, you should now have your own endpoints, plus
    // one endpoint for each contract and binding
    }

    我也 fonud this blog post here很有启发性 - Christopher 的博客充满了很好的和非常有用的 WCF 帖子 - 强烈推荐。

    关于WCF 自托管服务 - C# 中的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2807525/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com