对于在IIS中通过W3SVC或WAS寄宿的WCF Service,其在浏览器中显示的地址(Web地址),与其配置文件中的BaseAddress和EndPoint Address有什么关系呢?让我们来分析一下。

第一,在IIS中寄宿时,不管WCF Service的EndPoint用什么协议向外暴露,它在浏览器中显示的地址不会变。该地址是WCF Service的可浏览地址(Web地址),它取决于WCF Service在IIS中的虚拟路径。该地址是面向浏览器的,只支持Http协议,例如http://localhost/WcfSrvDemo4/OrderProcessorService.svc。此时(除非使用MSMQ协议),BaseAddress的设定值会被忽略掉,WCF Service的可浏览地址(Web地址)成为客户端访问的“基础地址”。如果不在IIS中寄宿,就不能再浏览器中查看,那么就没有所谓的可浏览器地址(Web地址),BaseAddress开始起作用。

第二,一般来说,基础地址(BaseAddress或者Web地址)和EndPoint Address具有基址和相对路径的关系,基础地址(BaseAddress或者Web地址)+ EndPoint Address属性,就是完整的EndPoint地址,是客户端能够访问的地址。

第三,在IIS中寄宿时,可浏览地址(Web地址)不变,EndPoint的地址要随着所使用协议情况而变化。使用Http协议是,EndPoint的地址就是第二点所说的可浏览地址(Web地址)+ EndPoint的Address属性。使用其他协议的情况,就有些不同。当时用TCP和NamedPipe的时候,EndPoint的地址是先计算出可浏览地址(Web地址)+EndPoint的Address属性,然后将地址中的http相应的换成net.tcp和net.pipe,例如net.tcp://localhost/WcfSrvDemo4/OrderProcessorService.svcnet.pipe://localhost/WcfSrvDemo4/OrderProcessorService.svc

而当使用MSMQ来传输数据的时候,情况就会变得更加复杂。虽然可浏览地址仍旧不会变,但是EndPoint的地址,不再是简单地修改可浏览地址的协议部分(必须使用net.msmq协议),而需要在主机之后,虚拟路径之前添加上队列类型信息(private,public或者其他的)。例如net.msmq://localhost/private/WcfSrvDemo4/OrderProcessorService.svc。值得注意的是,这个路径必须指向一个实际存在的MSMQ队列,否则就会出错。

第四,SVCUtil使用的mex的EndPoint地址, 对于IIS寄宿的服务来说,就是 “可浏览地址(Web地址)/mex”;对于其他寄宿方式的服务来说,就是BaseAddress+EndPoint属性。

地址是ABC中最复杂的一环,它要解决在哪里的问题。但网络环境和所用协议的不同,让这个本来简单的问题复杂了。但是,弄懂了复杂的逻辑之后,复杂性的强大之处就会展露无遗。

WCF :IIS寄宿方式的Web地址、BaseAddress和EndPoint Address的关系的更多相关文章

  1. 微软 WCF的几种寄宿方式,寄宿IIS、寄宿winform、寄宿控制台、寄宿Windows服务

    WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详 ...

  2. WCF开发框架形成之旅---WCF的几种寄宿方式

    WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者 ...

  3. (转)WCF开发框架形成之旅---WCF的几种寄宿方式

    WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者方便.高效提供服务调用.本文分别对这几种方式进行详 ...

  4. WCF寄宿方式

    WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为调用者 ...

  5. WCF学习之三, 寄宿方式 代码,配置文件

    可以通过代码或者配置文件寄宿WCF服务,在使用过程中的一些心得,记录一下,方便后续查阅. 预备知识,几个地址的作用 1. behavior.HttpGetUrl  定义元数据的地址,如果不定义基地址, ...

  6. [转]WCF的几种寄宿方式

    转自:WCF开发框架形成之旅---WCF的几种寄宿方式 WCF寄宿方式是一种非常灵活的操作,可以在IIS服务.Windows服务.Winform程序.控制台程序中进行寄宿,从而实现WCF服务的运行,为 ...

  7. 重温WCF之构建一个简单的WCF(一)(1)通过控制台和IIS寄宿服务

    一.理解什么是WCFWCF就是.NET平台下各种分布式技术的集成,并提供了一套统一的编程接口 二.WCF的定义WCF(Windows Communication Foundation)是微软为构建面向 ...

  8. WCF服务寄宿IIS与Windows服务 - C#/.NET

    WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的运行 ...

  9. WCF服务寄宿IIS与Windows服务

      WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的 ...

随机推荐

  1. C/C++ Learning

    目录 1. C/C++中的关键字2. C/C++中的标识符3. 编译选项MD(d).MT(d)编译选项的区别4. C++类模板.函数模板5. C++修饰符6. 调用约定7. 错误处理8. 环境表 9. ...

  2. 在Swift中使用JavaScript的方法和技巧

    本文作者Nate Cook是一位独立的Web及移动应用开发者,是继Mattt大神之后NSHipster的主要维护者,也是非常知名活跃的Swift博主,并且还是支持自动生成Swift在线文档的Swift ...

  3. Android中运行的错误:java.lang.UnsatisfiedLinkError: Couldn't load locSDK3: findLibrary returned null.

    ---恢复内容开始--- 明明已经加入了liblocSDK3.so,但总是无法定位.提示错误java.lang.UnsatisfiedLinkError: Couldn't load locSDK3: ...

  4. C#和Javascript的try…catch…finally的一点差别

    C#中规定:如果程序的控制流进入了一个带finally块的try语句,那么finally语句块始终会被执行 例子: class Program { static void Main(string[] ...

  5. AngularJs $resource 高大上的数据交互

    $resource 创建一个resource对象的工厂函数,可以让你安全的和RESFUL服务端进行数据交互. 需要注入 ngResource 模块.angular-resource[.min].js ...

  6. Mouse.OverrideCursor

    介绍: 获取和设置整个应用程序的光标,WPF父元素将覆盖所有子元素的光标. WPF设置控件的光标: WPF 中每个光标通过一个System.Windows.Input.Cursor表示, 获取Curs ...

  7. MATLAB cell & struct

    CELL cell的每个单元都可以存储任何数据,比如传递函数等.当然,存储矩阵更是没有问题的了.但是用cell数据类型之前,要先初始化. a=cell(n,m) 那么就把a初始化为一个n行m列的空ce ...

  8. ES6之let(理解闭包)和const命令

    ES6之let(理解闭包)和const命令 最近做项目的过程中,使用到了ES6,因为之前很少接触,所以使用起来还不够熟悉.因此购买了阮一峰老师的ES6标准入门,在此感谢阮一峰老师的著作. 我们知道,E ...

  9. C#中字符串的操作

    1.Replace(替换字符):public string Replace(char oldChar,char newChar);在对象中寻找oldChar,如果寻找到,就用newChar将oldCh ...

  10. 转换流——OutputStreamWriter类与InputStreamReader类

    字节流和字符流的转换类 OutputStreamWriter:是Writer的子类,将输出的字符流变成字节流 InputStreamReader:是Reader的子类,将输入的字节流变成字符流 将字节 ...