gpt4 book ai didi

wcf - 多个 WCF 服务可以共享一个公共(public) BaseAddress 吗?

转载 作者:行者123 更新时间:2023-12-04 02:09:00 26 4
gpt4 key购买 nike

我有一个包含几个 WCF 服务的程序集,每个服务都有自己的契约(Contract)。这一切都很好。该服务的 app.config 中的服务配置如下所示:

<services>
<service behaviorConfiguration="WcfService.AlyzaServiceBehavior"
name="Sam.Alyza.WcfService.ServiceWebsites">
<endpoint address="" binding="netTcpBinding" contract="Sam.Alyza.WcfInterface.IServiceWebsites">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8731/Design_Time_Addresses/SamAlyza/Websites/" />
</baseAddresses>
</host>
</service>
<service behaviorConfiguration="Sam.Alyza.WcfService.LogReaderServiceBehavior"
name="Sam.Alyza.WcfService.ServiceLogReader">
<endpoint address="" binding="netTcpBinding" contract="Sam.Alyza.WcfInterface.IServiceLogReader">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8731/Design_Time_Addresses/SamAlyza/LogReader/" />
</baseAddresses>
</host>
</service>
<service behaviorConfiguration="Sam.Alyza.WcfService.ServiceSystemverwaltungBehavior"
name="Sam.Alyza.WcfService.ServiceSystemverwaltung">
<endpoint address="" binding="netTcpBinding" contract="Sam.Alyza.WcfInterface.IServiceSystemverwaltung">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8731/Design_Time_Addresses/SamAlyza/Systemverwaltung/" />
</baseAddresses>
</host>
</service>
[...]
</services>

由于我有一个更大的项目,有更多的契约(Contract),我想有一种方法可以在不同的服务契约(Contract)之间共享 BaseAddress。
如果这只是一个具有不同合约和端点的服务,我可以设置一个通用基地址,但是如何为多个服务设置一个通用基地址?

当然,我需要为客户提供类似的东西。

最佳答案

您可以将所有合约合并到一个类中,这样您就拥有一个带有基地址的服务和每个合约一个(或多个)端点。

为了避免拥有一个大的类文件,您可以使用部分关键字(假设您使用 c#)将类拆分到多个文件中。每个文件都可以实现一个合约,这使得维护各个接口(interface)变得更加容易。

在 C++ 中,您可以使用#includes 或多重继承,但这意味着大量的纪律......

您的配置将如下所示:

<services>
<service behaviorConfiguration="WcfService.AlyzaServiceBehavior"
name="Sam.Alyza.WcfService.ServiceAll">
<endpoint address="Websites/" binding="netTcpBinding" contract="Sam.Alyza.WcfInterface.IServiceWebsites">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="LogReader/" binding="netTcpBinding" contract="Sam.Alyza.WcfInterface.IServiceLogReader">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="Systemverwaltung/" binding="netTcpBinding" contract="Sam.Alyza.WcfInterface.IServiceSystemverwaltung">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8731/Design_Time_Addresses/SamAlyza/" />
</baseAddresses>
</host>
</service>
</services>

关于wcf - 多个 WCF 服务可以共享一个公共(public) BaseAddress 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435423/

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