WCF HostClientEndpoint配置相关问题Word下载.docx
- 文档编号:17562444
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:5
- 大小:19.03KB
WCF HostClientEndpoint配置相关问题Word下载.docx
《WCF HostClientEndpoint配置相关问题Word下载.docx》由会员分享,可在线阅读,更多相关《WCF HostClientEndpoint配置相关问题Word下载.docx(5页珍藏版)》请在冰豆网上搜索。
8
相关属性解释:
9
name
-
指定这个service配置是针对的哪一个WCF服务的
10
(名称空间.类型名),ServiceHost载入一个服务后,会到配置文件中的<
下找有没有
11
name属性跟服务匹配的<
service>
的配置
12
behaviorConfiguration
指定在<
serviceBehaviors>
下的一个<
behavior>
的name,这个特定<
13
给这个service制定了一些行为,比如服务是否允许身份模拟-->
14
name="
behaviorConfiguration="
BehaviorName"
15
每个服务可以有多个Endpoint,下面<
endpoint>
元素对每个Endpoint分别进行配置
16
属性说明:
17
address
指定这个Endpoint对外的URI,这个URI可以是个绝对地址,也可以是个相对于baseAddress的
18
相对地址。
如果此属性为空,则这个Endpoint的地址就是baseAddress
19
binding
指定这个Endpoint使用的binding,这个banding可以是系统预定义的9个binding之一,
20
比如是basicHttpBinding,也可以是自定义的customBinding。
binding决定了通讯的类型、
21
安全、如何编码、是否基于session、是否基于事务等等
22
contract
指定这个Endpoint对应的Contract的全限定名(名称空间.类型名),这个Contract应该被
23
service元素的name指定的那个service实现
24
bindingConfiguration
指定一个binding的配置名称,跟<
bindings>
下面同类<
binding>
的name匹配
25
Endpoint的名称,可选属性,每个Contract都可以有多个Endpoint,但是每个Contract对应的
26
多个Endpoint名必须是唯一的-->
27
endpoint
address="
URI"
binding="
basicHttpBinding"
contract="
Contract全限定名"
bindingConfiguration="
binding名"
28
用户定义的xml元素集合,一般用作SOAP的header内容-->
29
headers>
30
任何xml内容
31
/headers>
32
identity>
33
下的元素都是可选的-->
34
userPrincipalName>
/userPrincipalName>
35
servicePrincipalName>
/servicePrincipalName>
36
dns>
/dns>
37
rsa>
/rsa>
38
certificate
encodedValue="
/certificate>
39
certificateReference>
的属性都是可选的
40
属性说明:
41
storeName
证书的存储区,可能值为:
AddressBook,AuthRoot,CertificateAuthority
42
Disallowed,My,Root,TrustedPeople,TrustedPublisher
43
storeLocation
证书存储位置,可能值为:
CurrentUser,LocalMachine-->
44
certificateReference
storeName="
storeLocation="
45
/certificateReference>
46
/identity>
47
/endpoint>
48
host>
49
baseAddresses>
50
在此可以定义每种传输协议的baseAddress,用于跟使用同样传输协议Endpoint定义的相对地
51
址组成完整的地址,但是每种传输协议只能定义一个baseAddress。
HTTP的baseAddress同时是service
52
对外发布元数据的URL-->
53
add
baseAddress="
/>
54
/baseAddresses>
55
timeouts>
/timeouts>
56
/host>
57
/service>
58
/services>
59
--绑定配置-->
60
61
指定一个或多个系统预定义的binding,比如<
basicHttpBinding>
,当然也可以指定自定义的customBinding,
62
然后在某个指定的binding下建立一个或多个配置,以便被Endpoint来使用这些配置
63
64
某一类的binding的下面可能有多个配置,binding元素的name属性标识某个binding-->
65
66
/binding>
67
/basicHttpBinding>
68
/bindings>
69
定义service和Endpiont行为-->
70
behaviors>
71
定义service的行为-->
72
73
一个或多个系统提供的或定制的behavior元素
74
75
一个behavior唯一标识,<
元素的behaviorConfiguration属性指向这个name-->
76
behavior
77
指定service元数据发布和相关信息
78
79
httpGetEnabled
bool类型的值,表示是否允许通过HTTP的get方法获取sevice的WSDL元数据
80
httpGetUrl
如果httpGetEnabled为true,这个属性指示使用哪个URL地址发布服务的WSDL,
81
如果这个属性没有设置,则使用服务的HTTP类型的baseAddress后面加上?
WSDL-->
82
serviceMetadata
httpGetEnabled="
true"
httpGetUrl="
83
/behavior>
84
/serviceBehaviors>
85
定义Endpiont的行为-->
86
endpointBehaviors>
87
/endpointBehaviors>
88
/behaviors>
89
包含客户端跟服务端连接使用到的Endpoint的配置
90
client>
91
每个客户端Endpoint设置
92
93
ServiceHost的这个Endpoint的address
94
指定这个Endpoint使用的binding,这个binding可以是系统预定义的9个binding之一,
95
比如是basicHttpBinding
96
指定这个Endpoint对应的Contract的全限定名(名称空间.类型名)
97
Endpoint的名称,客户端代理类的构造方法中的endpointConfigurationName对应到这个name
98
指定客户端binding的具体设置,指向<
元素下同类型binding的name
99
--如果此处有多个endpoint,系统会默认使用最后一个endpoint的配置-->
100
101
102
endpoint配置名"
103
/client>
104
105
/configuration>
106
107
ServiceClient:
配置(如果我们是在一个项目中添加了WCF引用时,系统会在或者是文件中添加一些相应的配置)
wsHttpBinding>
WSHttpBinding_ICPWService"
closeTimeout="
00:
01:
00"
openTimeout="
receiveTimeout="
10:
sendTimeout="
bypassProxyOnLocal="
false"
transactionFlow="
hostNameComparisonMode="
StrongWildcard"
maxBufferPoolSize="
524288"
maxReceivedMessageSize="
65536"
messageEncoding="
Text"
textEncoding="
useDefaultWebProxy="
allowCookies="
readerQuotas
maxDepth="
32"
maxStringContentLength="
8192"
maxArrayLength="
16384"
maxBytesPerRead="
4096"
maxNameTableCharCount="
reliableSession
ordered="
inactivityTimeout="
enabled="
security
mode="
None"
transport
clientCredentialType="
Windows"
proxyCredentialType="
realm="
message
negotiateServiceCredential="
establishSecurityContext="
/security>
/wsHttpBinding>
wsHttpBinding"
WSHttpBinding_IService"
endpointname"
注:
其中一些说明信息是从网上“偷”来的
下面开始讲我遇到的配置问题:
不同的场景下大家都会遇到一些不一样的解决问题的方法,所以这个世界上需要有程序员。
大家都说我们是搞的,想想也不错,确实是“搞”的,出来什么技术我们就“搞”什么,后来又觉得“搞什么搞嘛,还不是人家提供了多少什么就搞点什么,偶尔想自己搞点什么了,还是去重新实现他们提供的接口。
结果还是:
人家让你怎么搞你就得怎么搞”
呵呵,今天就碰到一个问题,需要动态设置WCF的配置信息,想把WCFClient的配置从文件里拿出来,重新放置在一个目录。
如:
App_Data/config/,在文件中添加几个节点,由程序动态决定什么时候用什么样的配置。
当时觉得没有什么太大问题,于是就找什么时候可以改变WCFClient的配置。
从网上查资料,查MSDN,查Reflector,最终也没有找着好用的方法,所有的方法里提醒的比较有价值的也就只有一个:
更改client的EndPoint的相应Name属性。
然后Client会自动按照相应的Name对应的配置文件,配置当前的ServiceClient。
即:
说到这里大家可能觉得问题已经解决了,但是:
原有的想法是,直接把配置文件拿到app_data/目录下,而现在只解决了一个“endpoint的Name”的问题,因此问题并没有解决。
难道微软就真的没有提醒方法可以重新设置WCFClient的配置的方法吗?
有些了解的同志们肯定比我更清楚这个问题,WCF Client的binding,endpoint,Address……等属性都是可以重新设置的,所以是可以重新设置的。
只是找了半天也没有找着自己想要的那种“方便”的设置方法,只给client一个XElement就可以初始化一个ServiceClient,至于XElement中的关于Address,Binding,contract等解析工作还是全部抛给微软现成的类库去处理。
找着ServiceClient父类是:
ClientBase<
TChannel>
,使用Reflector查看了此类的构造方法,最终也没有找见可以指定一个XElement就可以初始化一个ServiceClient的方法,其配置信息的读取是使用了写死的从“config”文件里读。
最终失败……非常期待各位前辈能给出指点。
(不想自己新建类解析自己的XElement然后再为相应的ServiceClient赋值来实现,因为我的配置节点完全跟微软提供的配置节点一致,为什么没有现有的方法呢?
)
v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WCF HostClientEndpoint配置相关问题 HostClientEndpoint 配置 相关 问题