WCF端点将不注册

本文关键字:注册 端点 WCF | 更新日期: 2023-09-27 18:11:29

我正在创建这个WCF,但是我在WCF的ABC中遇到了这个问题。

在我的App.Config中我有以下内容:

<service name="WCFService.AuctionService">
    <endpoint address="" binding="basicHttpBinding" contract="WCFService.IAuctionService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="" binding="basicHttpBinding" contract="WCFService.IArtPieceService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8733/Design_Time_Addresses/WCFService/AuctionService/"/>
        <add baseAddress="http://localhost:8733/Design_Time_Addresses/WCFService/ArtPieceService/"/>
      </baseAddresses>
    </host>
  </service>
</services>

以上是app.config文件的更新版本。

那么它就不会运行了。它给出了一个没有定义的端点。在合同列表中找不到该服务。

下面是我的类:

 public class AuctionService : IAuctionService {
    private AuctionDb _ctr = new AuctionDb();
    public void Add(Auction auction) {
        String regName = "^[a - zA - Z0 - 9]{ 4,10}$";
        if (Regex.IsMatch(auction.AuctionName, regName) || auction.AuctionName.Length > 1)
            throw new ArgumentException();
        if(auction.LotDuration.TotalSeconds > 0 || auction.LotDuration.TotalMinutes > 120 || auction.Lots.Count > 0)
            throw new ArgumentException();
        _ctr.Add(auction);
    }
    public void Update(Auction auction) {
        String regName = "^[a - zA - Z0 - 9]{ 4,10}$";
        if (Regex.IsMatch(auction.AuctionName, regName) || auction.AuctionName.Length > 1)
            throw new ArgumentException();
        if (auction.LotDuration.TotalSeconds > 0 || auction.LotDuration.TotalMinutes > 120 || auction.Lots.Count > 0)
            throw new ArgumentException();
        _ctr.Update(auction);
    }
    public List<Auction> GetAll() {
        return _ctr.GetAll();
    }
}
public class ArtPieceService : IArtPieceService
{
    public void Add(ArtPiece piece)
    {
        throw new NotImplementedException();
    }
}

以下是我的ServiceContracts:

 [ServiceContract]
public interface IArtPieceService
{
    [OperationContract]
    void Add(ArtPiece piece);
}

和另一个合同:

[ServiceContract]
public interface IAuctionService
{
    [OperationContract]
    void Add(Auction auction);
    [OperationContract]
    void Update(Auction auction);
    [OperationContract]
    List<Auction> GetAll();
}

如果ArtPieceService给出了一个未定义的端点,并且该合约没有在合约列表中找到。

首先感谢你的帮助。

WCF端点将不注册

两个端点不能有相同的地址。

当您添加以下端点时,而不是使用这个:

<endpoint address="" binding="basicHttpBinding" contract="WCFService.IArtPieceService"/>

像这样指定一个新地址:

<endpoint address="service2" binding="basicHttpBinding" contract="WCFService.IArtPieceService"/>
这意味着当您访问第二个端点时,您需要使用以下url:
http://localhost:8733/Design_Time_Addresses/WCFService/AuctionService/service2

这当然是假设你的AuctionService类同时实现了IAuctionService和IArtPieceService合约(接口)

如果你想为两个不同的服务创建两个不同的类,那么你必须在app.config中创建另一个service xml元素。

这将导致在您的services元素中有两个service元素作为子元素。

这个新元素是原元素的副本,但具有不同的名称、不同的地址和不同的契约。这样的:

<service name="WCFService.ArtPieceService">
    <endpoint address="" binding="basicHttpBinding" contract="WCFService.IArtPieceService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8733/Design_Time_Addresses/WCFService/ArtPieceService/"/>
      </baseAddresses>
    </host>
  </service>

另外,请确保为这两个服务打开一个单独的ServiceHost实例。