我只是在学习wcf并且无法理解一个非常基本的东西.
我正在创建一个WCF服务,我想在IIS中托管,就像Web应用程序一样,它有自己的路径http://myhost/myapp/和所有东西.
我正在VS中创建WCF服务项目,我有一个*.svc描述它的文件,然后我像这样定义一个简单的端点:
<endpoint address=""
binding="basicHttpBinding"
contract="wcf_service_auth.IPshService" />
Run Code Online (Sandbox Code Playgroud)
然后我将这个服务像IIS Web应用程序一样发布到虚拟目录,我们假设它的名称psh_pub,所以我可以通过url访问该服务http://localhost/psh_pub/pshservice.svc/.它向我展示了WCF问候页面并给了我一个WSDL链接,它给了我正确的wsdl描述.
没关系.
下一步 - 我想添加一个MEX端点.我添加到配置:
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
Run Code Online (Sandbox Code Playgroud)
也没关系,端点可以在地址访问,http://localhost/psh_pub/pshservice.svc/mex并WcfTestClient.exe从该URL提供正确的配置.
问题来了.
我有一个在IIS下工作的WCF服务,我想再添加一个端点.例如,让它成为一个net.tcp端点.IIS默认配置为接受net.tcp端口808的连接,我正在net.tcp为我的Web应用程序的属性添加协议,我想将端点添加到我的服务中:
<endpoint address=""
binding="netTcpBinding"
contract="wcf_service_auth.IPshService" />
Run Code Online (Sandbox Code Playgroud)
现在我假设我的服务应该可以通过网址访问net.tcp://localhost:808/psh_pub/pshservice.svc.但事实并非如此.网上的每个"操作方法"和手册都告诉我应该在配置文件中指定完整地址,如下所示:
<endpoint address="net.tcp://localhost:808/psh_pub/pshservice.svc"
binding="netTcpBinding"
contract="wcf_service_auth.IPshService" />
Run Code Online (Sandbox Code Playgroud)
如果我这样做,它的确有效.但是如果将服务托管在另一个虚拟目录中,我将需要更改配置.如果我在另一台服务器上托管它,我需要更改配置.如果我在多台服务器上托管它,我将必须维护与我拥有的服务器一样多的配置.
所以主要问题是:
是否有任何方法在WCF中指定net.tcpIIS托管的WCF服务的(或https)端点而不指定它的绝对URL?
您应该能够为服务端点定义基址net.tcp:
<service name="YourServiceName">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:808/psh_pub/" />
</baseAddresses>
</host>
Run Code Online (Sandbox Code Playgroud)
然后,您应该能够在实际端点中使用相对地址:
<endpoint name="Tcp01"
address="pshservice.svc"
binding="netTcpBinding"
contract="wcf_service_auth.IPshService" />
</service>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19060 次 |
| 最近记录: |