WCF中神秘的“8731"端口和“Design_Time_Addresses”
如果使用Visual Studio 2008 SP1开发WCF应用程序时,会发现当使用Visual Studio 2008的新建“WCF服务”模板向项目中添加WCF服务时,Visual Studio 2008总是使用wsHttpBinding绑定,并且使用以下格式的地址:
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/WCF服务名"/>
</baseAddresses>
</host>
这里面有一个神秘的端口8731和一个神秘的地址Design_Time_Addresses。
让我们来做个实验:
在Vista中关闭用户账户控制,然后启动Visual Studio 2008,基于新建“WCF服务”模板向项目中添加一个WCF服务(不妨取名MyWCFService),生成的默认服务地址为:
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/MyWCFService/" />
</baseAddresses>
去掉Design_Time_Addresses,将其改为:
<baseAddresses>
<add baseAddress="http://localhost:8731/MyWCFService/" />
</baseAddresses>
你会发现WCF的服务启动不会有任何问题。
然而,现在打开用户账户控制,再次使用Visual Studio 2008打开并运行同样的代码,Visual Studio 2008会抱怨:
将其改回:
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/MyWCFService/" />
</baseAddresses>
发现WCF服务又可以启动了。
刚遇到这种情况时真得很奇怪,“8731“端口和“Design_Time_Addresses”到底有何“神秘”之处,有这种怪异的特性?
Google一下,终于在Cesar de la Torre的博客中发现了问题原因(http://blogs.msdn.com/cesardelatorre/archive/2008/01/27/design-time-addresses-url-in-wcf-net-3-5.aspx):
原来Visual studio 2008在安装时注册了一个针对"http://+:8731/Design_Time_Addresses"命名空间的ACL(Access Control List),从而使运行Visual studio的当前用户(他们属于此ACL)不需要Administrator权限也可以开发和调试WCF服务。
由此真相大白,如果你在开发WCF服务时需要指定不同于默认值的WCF服务地址,请以“管理员”身份运行Visual Studio 2008。
或者更简单一些,关掉用户帐户控制,我一直觉得Vista的"用户帐户控制"功能实在烦人,有了它也不见得就安全了。
分享到:
相关推荐
<endpoint address="http://localhost:8732/Design_Time_Addresses/WCFService/CalculationService/" binding="wsHttpBinding" contract="WCFService.ICalculationService" /> <!-- 默认的行为配置 --...
<add baseAddress="http://localhost:8732/Design_Time_Addresses/WcfService/Service1/" /> </baseAddresses> ``` 这段配置定义了一个基本HTTP绑定的服务终结点,其地址为空,监听在本地8732端口。 ### 3....
ServiceHost host = new ServiceHost(typeof(YourServiceClass), new Uri("http://localhost:8732/Design_Time_Addresses/YourService/")); try { ServiceMetadataBehavior smb = new ServiceMetadataBehavior...
<add baseAddress="http://localhost:8732/Design_Time_Addresses/MyWcfService/" /> </baseAddresses> ``` 5. **启动服务**:在Visual Studio中调试或运行项目,WCF服务将自动启动并监听指定端口。 ...
<add baseAddress="http://localhost:8732/Design_Time_Addresses/YourNamespace/Service1/" /> </baseAddresses> ``` 5. **运行服务**: 以管理员身份运行Visual Studio,右键点击项目并选择"调试" ->...
<endpoint address="http://localhost:8732/Design_Time_Addresses/YourNamespace/HelloWorldService/" binding="basicHttpBinding" contract="YourNamespace.IHelloWorld" /> ``` 这将服务的终结点配置为监听在...
<add baseAddress="http://localhost:8732/Design_Time_Addresses/MyNamespace/MyService/" /> </baseAddresses> ``` 配置完成后,可以使用Visual Studio的“添加服务引用”功能或通过 mex ...
<add baseAddress="http://localhost:8732/Design_Time_Addresses/WcfService4/" /> </baseAddresses> ``` 5. **运行服务**:启动调试器,服务将在指定的端口上运行。 **三、跨平台支持** WCF支持多种协议...
<add baseAddress="net.tcp://localhost:8732/Design_Time_Addresses/YourNamespace/"/> </baseAddresses> ``` 4. **启动服务(Host the Service)**:然后,我们需要一个宿主来承载服务,这可以是...
2. **添加服务引用**:在客户端项目中,右键点击“引用”>“添加服务引用”,输入服务的URL(例如:http://localhost:8732/Design_Time_Addresses/ServiceLibrary/Service1/),生成服务代理类和服务合同。...
using (ServiceHost host = new ServiceHost(typeof(Service1), new Uri("http://localhost:8732/Design_Time_Addresses/Service1/"))) { host.Open(); Console.WriteLine("Service is running. Press any key to ...
var address = new EndpointAddress("http://localhost:8732/Design_Time_Addresses/HelloWorldService/"); ``` **6. 配置(Configuration)** WCF服务可以通过代码或配置文件进行配置。配置文件(如app.config或...
<add baseAddress="net.tcp://localhost:8732/Design_Time_Addresses/YourNamespace/Service1/" /> </baseAddresses> binding="netTcpBinding" contract="YourNamespace.IService1" /> binding=...