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给出了一个未定义的端点,并且该合约没有在合约列表中找到。
首先感谢你的帮助。
两个端点不能有相同的地址。
当您添加以下端点时,而不是使用这个:
<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实例。