我在同一台机器上有两个网站。第一个(客户端)引用第二个站点(服务器)上的 WCF 服务。
如何设置服务参考的地址?从本地计算机上的开发转移到组开发服务器时,如何更改服务的 url?这些站点由主机标头区分,例如 http://dev.admin/ ... 和 http://dev.public/ ...
我觉得这可以使用多个端点来处理,但我对 WCF 很陌生,真的不知道我在这里做什么。
我在同一台机器上有两个网站。第一个(客户端)引用第二个站点(服务器)上的 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 印象 热门:持久对象。客户端代理对象(在添加服务引用时创建)维护与服务器上服务的持久连接。客户端代理引用的服务实例在调用之间维护其状态,这可以简化方法签名并使客户端代理对象和整个服务对某些应用程序更有用。如果在公共库中声明参数对象类型,则它们可以在客户端和服务器之间共享,这意味着您不必创建两个非常相似的类或包装类来来回传递非原始数据结构。
什么不是:配置是一种皇家痛苦,记录不充分,而且涉及太多。让它在服务需要知道其位置的测试/开发/登台/生产环境配置中工作是令人沮丧的。我不相信让服务知道它的域 url(而不是说,它运行的任何东西的相对路径)有什么显着的好处,除了安全问题。
也就是说,我将继续走 WCF 的道路,因为迄今为止的优势超过了令人头疼的问题。
最简单的方法:在不同的端口上运行 WCF 部件。