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

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

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

有帮助吗?

解决方案

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

什么不是:配置是一种皇家的痛苦,记录很少,而且涉及太多。让它在测试/ dev / staging / production环境配置中工作,其中服务需要知道它的位置是令人沮丧的。我不相信让服务知道它的域名网址(而不是说,它运行的任何相对路径)有任何重大的好处,安全问题放在一边。

那就是说,我继续沿着WCF路走下去,因为这样的优势远远超过了头痛。

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top