Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 端点相对地址_Wcf_Endpoint - Fatal编程技术网

Wcf 端点相对地址

Wcf 端点相对地址,wcf,endpoint,Wcf,Endpoint,我只是在学习wcf,不能理解一件非常基本的事情 我正在创建一个WCF服务,我想将其托管在IIS中,就像web应用程序一样,具有自己的路径,如http://myhost/myapp/以及所有内容 我在VS中创建WCF服务项目,我有一个描述它的*.svc文件,然后我定义了一个简单的端点,如下所示: <endpoint address="" binding="basicHttpBinding" contract="wcf_service_auth.IP

我只是在学习wcf,不能理解一件非常基本的事情

我正在创建一个WCF服务,我想将其托管在IIS中,就像web应用程序一样,具有自己的路径,如
http://myhost/myapp/
以及所有内容

我在VS中创建WCF服务项目,我有一个描述它的
*.svc
文件,然后我定义了一个简单的端点,如下所示:

<endpoint address="" 
          binding="basicHttpBinding" 
          contract="wcf_service_auth.IPshService" />
<endpoint address="net.tcp://localhost:808/psh_pub/pshservice.svc" 
          binding="netTcpBinding" 
          contract="wcf_service_auth.IPshService" />
也没关系,端点可以在地址
http://localhost/psh_pub/pshservice.svc/mex
WcfTestClient.exe
提供了该url的正确配置

问题来了

我有一个在IIS下工作的WCF服务,我想再向它添加一个端点。例如,让它成为
net.tcp
端点。IIS默认配置为在端口808接受
net.tcp
连接,我正在将
net.tcp
协议添加到我的web应用程序的属性中,我想向我的服务添加一个端点,如下所示:

<endpoint address=""
          binding="netTcpBinding" 
          contract="wcf_service_auth.IPshService"  />
如果我这样做了,它就会起作用。但是如果将服务托管在另一个虚拟目录中,我需要更改配置。如果我把它放在另一台服务器上,我需要更改配置。如果我在多台服务器上托管它,我将必须维护尽可能多的服务器配置

因此,主要问题是:

WCF中是否有任何方法可以指定IIS承载的WCF服务的
net.tcp
(或https)端点,而无需为其指定绝对url?

WCF无文件激活(.net 4.0)将允许您使用relativeAddress属性在相对虚拟路径下注册:

<system.serviceModel>
  <serviceHostingEnvironment>
    <serviceActivations>
      <add relativeAddress="relative-virtual-path/yourservice.svc"
           service="YourServiceImpl" />
    </serviceActivations>
  </serviceHostingEnvironment>
</system.serviceModel>


您应该能够为
net.tcp
服务端点定义基址

<service name="YourServiceName">
   <host>
       <baseAddresses>
          <add baseAddress="net.tcp://localhost:808/psh_pub/" />
       </baseAddresses>
   </host>
   <endpoint name="Tcp01"
             address="pshservice.svc" 
             binding="netTcpBinding" 
             contract="wcf_service_auth.IPshService" />
</service>

然后,您应该能够在实际端点中使用相对地址:

<service name="YourServiceName">
   <host>
       <baseAddresses>
          <add baseAddress="net.tcp://localhost:808/psh_pub/" />
       </baseAddresses>
   </host>
   <endpoint name="Tcp01"
             address="pshservice.svc" 
             binding="netTcpBinding" 
             contract="wcf_service_auth.IPshService" />
</service>


无文件激活允许我删除.svc文件,但我看不出它如何有助于避免为net.tcp端点指定绝对主机地址。我错过了什么吗?@pushit1y服务激活下有一个名为relativeAddress的属性,允许您指定访问服务的相对虚拟路径。这对您不起作用吗?我不知道我刚才做了什么,但我有一个工作的net.tcp端点,带有空的“address”参数。无论如何,谢谢你的帮助。