【问题标题】:WCF endpoints, baseAddressPrefixFilters, host headersWCF 端点、baseAddressPrefixFilters、主机头
【发布时间】:2009-09-09 19:04:41
【问题描述】:

我在同一台机器上有两个网站。第一个(客户端)引用第二个站点(服务器)上的 WCF 服务。

如何设置服务参考的地址?从本地机器上的开发转移到组开发服务器时,如何更改服务的 url?这些站点由主机标头区分,例如 http://dev.admin/... 和 http://dev.public/...

我觉得这可以使用多个端点来处理,但我对 WCF 很陌生,真的不知道我在这里做什么。

【问题讨论】:

    标签: wcf endpoint


    【解决方案1】:

    经过一番挫折,我设法确定两个 web.config 文件(在客户端和服务器上,在这种情况下都是 Web 应用程序),以下部分必须更改:

    客户:

       <client>
          <endpoint 
            address="http://mysite.com:port/services/someservice.svc"
            binding="basicHttpBinding" 
            bindingConfiguration="BasicHttpBinding_ISomeService"
            contract="MyServices.ISomeService" 
            name="BasicHttpBinding_ISomeService" />
    
        </client>
      </system.serviceModel>
    

    服务器

     <system.serviceModel>
        <serviceHostingEnvironment>
          <baseAddressPrefixFilters>
            <add prefix="http://mysite.com:port/services"/>
          </baseAddressPrefixFilters>
        </serviceHostingEnvironment>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MyServices.SomeServiceBehavior">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service behaviorConfiguration="MyServices.SomeServiceBehavior"
            name="MyServices.SomeService">
              <endpoint address="http://mysite.com:port/services/someservice.svc" 
                        name="endpoint.SomeService"
                        binding="basicHttpBinding" 
                        bindingConfiguration="" 
                        contract="MyServices.ISomeService"/>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
          </service>
        </services>
      </system.serviceModel>
    

    这里要注意的是,所有三个相关部分(客户端端点地址、服务器 baseAddressPrefixFilter 值和服务器端点地址)中的主机地址必须匹配。

    只要它们匹配,我就可以通过修改这些服务器在服务器之间切换。我仍然更喜欢一种基于服务器运行的机器来设置它的方法,但这暂时有效。

    WCF 展示次数 什么是热点:持久对象。客户端代理对象(在添加服务引用时创建)维护与服务器上服务的持久连接。客户端代理引用的服务实例在调用之间维护其状态,这可以简化方法签名并使客户端代理对象和整个服务对某些应用程序更有用。如果在公共库中声明参数对象类型,则它们可以在客户端和服务器之间共享,这意味着您不必创建两个非常相似的类或包装类来来回传递非原始数据结构。

    什么不是:配置是一种皇家痛苦,文档记录不充分,而且涉及太多。让它在服务需要知道其位置的测试/开发/登台/生产环境配置中工作是令人沮丧的。我不相信让服务知道它的域 url(而不是说,它运行的任何东西的相对路径)有什么显着的好处,除了安全问题。

    也就是说,我将继续走 WCF 道路,因为迄今为止的优势超过了令人头疼的问题。

    【讨论】:

      【解决方案2】:

      最简单的方法:在不同的端口上运行 WCF 部件。

      【讨论】:

      • 想详细说明一下?我不确定您所说的“WCF 部件”是什么意思。此外,是否可以为 wcf 指定与其所属站点不同的端口?我为什么要这样做?
      • 对不起,我更习惯在服务中托管 WCF,而不是在 IIS 中。对于您的情况,您可能需要查看ferventcoder.com/archive/2007/10/02/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      相关资源
      最近更新 更多