当我在浏览器中输入url时,自托管WCF服务不工作

本文关键字:WCF 服务 工作 浏览器 url 输入 | 更新日期: 2023-09-27 18:09:38

我是wcf的新手。我已经做了简单的自托管服务并添加了app.config,但是当我在浏览器中输入地址时,它没有显示我们在创建服务http://localhost:8067/WCFService时获得的服务页面,它没有显示服务,因为它显示了我们运行服务。但是当我尝试在public static void main而不是app.config中添加基础服务时,它工作得很好,我没有得到??有人能帮帮我吗?

以下是手动添加的app.config文件:

<configuration>
    <system.serviceModel>
        <services>
            <service name="SelfHostedWCFService.WCFService">
                <endpoint 
                 address="http://localhost:8067/WCFService" 
                 binding="wsHttpBinding" 
                 contract="SelfHostedWCFService.IWCFService">
                </endpoint>
            </service>
        </services>
    </system.serviceModel>
</configuration>

程序如下:

static void Main(string[] args)
{
    ServiceHost host = new ServiceHost(typeof(SelfHostedWCFService.WCFService));
    host.Open();
    Console.WriteLine("Server is Running...............");
    Console.ReadLine();
}

下面是手工添加的Interface文件:

namespace SelfHostedWCFService
{    
    [ServiceContract]
    interface IWCFService
    {
        [OperationContract]
        int Add(int a,int b);
        [OperationContract]
        int Sub(int a,int b);
        [OperationContract]
        int Mul(int a, int b);
    }
}

以下是Service cs文件手工添加:

namespace SelfHostedWCFService
{
    class WCFService : IWCFService
    {
        public int Add(int a, int b)
        {
            return (a + b);
        }
        public int Sub(int a, int b)
        {
            return (a-b);
        }
        public int Mul(int a, int b)
        {
            return (a*b);
        }
    }
}

我的app.config或其他概念有问题吗??

当我在浏览器中输入url时,自托管WCF服务不工作

您还需要将元端点添加到自托管服务中…

ServiceMetadataBehavior meta = new ServiceMetadataBehavior();
      meta.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
      _host.Description.Behaviors.Add(meta);
      _host.AddServiceEndpoint(
        ServiceMetadataBehavior.MexContractName,
        MetadataExchangeBindings.CreateMexHttpBinding(),
        "http://localhost:8067/WCFService/mex"
      );

您应该尝试将System.ServiceModel.Web导入到您的Interface项目中,并为您的OperationContract(s)添加[WebGet]属性

界面如下所示:

using System.ServiceModel.Web;
namespace SelfHostedWCFService
{    
        [ServiceContract]
        interface IWCFService
        {
            [OperationContract]
            [WebGet]
            int Add(int a,int b);
            [OperationContract]
            [WebGet]
            int Sub(int a,int b);
            [OperationContract]
            [WebGet]
            int Mul(int a, int b);
        }
}