WCF 中的服务主机如何与来自 web.config 或 app.config 的配置进行交互。当我创建服务主机时,我只在服务主机构造函数和服务类中指定一个 url。
但是在 app.config 或 web.config 我有另一个端点列表,每个端点都有自己的特定 url。那么 wcf 是如何处理这种情况的呢?它从 app.config 或 web.config 获取哪个端点?
端点的地址是相对于服务主机的基地址的。例如,如果您有这些端点:
<service name="MyService">
<endpoint address="" binding="ws2007HttpBinding" contract="IMyService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
和 的服务主机 url http://localhost:7777
,那么您将在 上公开您的服务http://localhost:7777
,并在 上公开元数据http://localhost:7777/mex
。
因此,一般而言,您的交互取决于几个因素 - 您的托管环境、您的代码以及您的网络或应用程序设置。
根据 MSDN ( http://msdn.microsoft.com/en-us/library/ms733749.aspx ):有两种方法可以在 WCF 中为服务指定端点地址。您可以为与服务关联的每个端点指定绝对地址,也可以为服务的 ServiceHost 提供基地址,然后为与此服务关联的每个端点指定一个地址,该地址是相对于该基地址定义的。您可以使用这些过程中的每一个在配置或代码中指定服务的端点地址。如果不指定相对地址,则服务使用基地址。
此外,您必须注意您的托管环境。例如 IIS 自己为端点生成你的基地址(即使它在配置中指定),同时在自主机中从配置中读取它。
上面的链接很好地描述了在代码或配置中指定地址的特性,以及它对宿主环境的依赖