【问题标题】:relationship between configuration in app.config or web.config and code in WCFapp.config 或 web.config 中的配置与 WCF 中的代码之间的关系
【发布时间】:2013-04-05 07:31:15
【问题描述】:

WCF 中的服务主机如何与来自 web.config 或 app.config 的配置进行交互。当我创建一个服务主机时,我只在服务主机构造函数和服务的类中指定一个 url。

但在 app.config 或 web.config 我有另一个端点列表,每个端点都有自己的特定 url。那么 wcf 是如何处理这种情况的呢?它从 app.config 或 web.config 获取哪个端点?

【问题讨论】:

标签: c# wcf


【解决方案1】:

端点的地址是相对于服务主机的基地址的。例如,如果您有这些端点:

<service name="MyService">
    <endpoint address="" binding="ws2007HttpBinding" contract="IMyService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>

http://localhost:7777 的服务主机网址,那么您将在http://localhost:7777 上公开您的服务,并在http://localhost:7777/mex 上公开元数据。

【讨论】:

  • 我的示例需要第二个端点,所以我选择了一个无害的端点。如果您希望您的客户端能够使用 svcutil.exe 而无需为 WSDL 执行 HTTP GET,则只需公开一个 MEX 端点。我自己不关心 MEX,我的服务行为中只有 &lt;serviceMetadata httpGetEnabled="true" /&gt;
【解决方案2】:

因此,一般而言,您的互动取决于几个因素 - 您的托管环境、您的代码以及您的网络或应用设置。

根据 MSDN (http://msdn.microsoft.com/en-us/library/ms733749.aspx):有两种方法可以为 WCF 中的服务指定端点地址。您可以为与服务关联的每个端点指定绝对地址,也可以为服务的 ServiceHost 提供基地址,然后为与此服务关联的每个端点指定一个地址,该地址是相对于该基地址定义的。您可以使用这些过程中的每一个在配置或代码中指定服务的端点地址。如果不指定相对地址,则服务使用基地址。

您还必须注意您的托管环境。例如 IIS 自己为端点生成你的基地址(即使它在配置中指定),同时在自主机中从配置中读取它。

上面的链接详细描述了在代码或配置中指定地址的特性,以及它对宿主环境的依赖

【讨论】:

    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 2011-06-30
    • 2012-02-18
    • 1970-01-01
    • 2011-10-12
    • 2021-05-18
    • 2020-06-01
    相关资源
    最近更新 更多