WCF 不托管 [重复]

Posted

技术标签:

【中文标题】WCF 不托管 [重复]【英文标题】:WCF does not host [duplicate] 【发布时间】:2015-01-03 00:02:47 【问题描述】:

直截了当,我有一个 WCF 项目和主机项目(我想启动服务),当我将 WCF 作为启动项目时,它托管服务,我收到一条确认消息(右下角)一切正常,但是当我尝试从 Host 项目托管时,它没有托管,没有任何确认消息。

这是我的主机代码:

static void Main(string[] args)
    
        using (ServiceHost host = new ServiceHost(typeof(MovieService)))
        

                host.Open();
                Console.WriteLine("The host is online.");
                Console.ReadLine();
                host.Close();
            


    

宿主 app.config:

<system.serviceModel>
<services>
  <service name="CinemaProject.WCF.MovieService">
    <endpoint address="" binding="wsHttpBinding" contract="CinemaProject.WCF.IMovieService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8733/Design_Time_Addresses/CinemaProject.WCF/MovieService/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="True" />
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

还有我的 WCF 代码:

public class MovieService : IMovieService

    static MovieCtr movieCtr = new MovieCtr();

    public void Add(Movie movie)
    
         movieCtr.add(movie);
    

    public void SearchById(int id)
    
    

    public void Update(Movie movie)
    
    

    public void Delete(Movie movie)
    
    

    public void DeleteById(int id)
    
    

    public IEnumerable<MovieDTO> All()
    
        return movieCtr.All();
    

和 WCF app.config:

<system.serviceModel>
<services>
  <service name="CinemaProject.WCF.MovieService">
    <endpoint address="" binding="wsHttpBinding" contract="CinemaProject.WCF.IMovieService">
      <identity>
        <dns value="localhost" />
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8733/Design_Time_Addresses/CinemaProject.WCF/MovieService/" />
      </baseAddresses>
    </host>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="True" />
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>

有人可以看看它并指出我正确的方向,并尽可能发布解决方案。

谢谢, 马吕斯·J。

【问题讨论】:

因此您将主机代码作为控制台应用程序启动,但消息The host is online. 没有出现? 它出现了,但我没有在右下角收到确认消息,客户端也无法连接,但如果我启动 WCF,一切正常。 不确定您是否收到确认消息,因为您现在将控制台应用程序用作主机。您可以通过在 CMD 窗口中使用 netstat -a 来检查您的 PC 是否实际上正在侦听端口 8733 上的传入连接。 嗯,它不是在听 8733,但是当我尝试将它更改为正在听的时候,我得到HTTP could not register URL http://+:1037/Design_Time_Addresses/CinemaProject.WCF/MovieService/. Your process does not have access rights to this namespace 【参考方案1】:

尝试从 CMD 窗口运行:

netsh http add urlacl url=http://+8733:/ user=DOMAIN\user

指定正确的域和用户

【讨论】:

以上是关于WCF 不托管 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

何时以及为何托管 WCF 服务?

想要将 WCF Web 服务作为 Windows 服务托管,而不是在 IIS 中托管

自托管 WCF 服务和 basicHttpBinding:绑定不提供表示调用者的 Windows 标识

WCF 服务 - 自托管服务不起作用

托管 WCF 服务

自托管 WCF REST 服务 JSON POST 方法不允许